
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://livre.g6.asso.fr/index.php?action=history&amp;feed=atom&amp;title=Les_primitives_de_conversion_entre_noms_et_adresses</id>
		<title>Les primitives de conversion entre noms et adresses - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://livre.g6.asso.fr/index.php?action=history&amp;feed=atom&amp;title=Les_primitives_de_conversion_entre_noms_et_adresses"/>
		<link rel="alternate" type="text/html" href="http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;action=history"/>
		<updated>2026-05-09T14:06:02Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.25.2</generator>

	<entry>
		<id>http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=4089&amp;oldid=prev</id>
		<title>Eduble: /* Les fonctions de conversion numériques d'adresses */</title>
		<link rel="alternate" type="text/html" href="http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=4089&amp;oldid=prev"/>
				<updated>2009-06-30T12:36:52Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Les fonctions de conversion numériques d&amp;#039;adresses&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:36, 30 June 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L50&quot; &gt;Line 50:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 50:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Le champ &amp;lt;tt&amp;gt;flags&amp;lt;/tt&amp;gt; permet de modifier la réponse : si flags contient le bit &amp;lt;tt&amp;gt;NI_NUMERICHOST&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;NI_NUMERICSERV&amp;lt;/tt&amp;gt;) la réponse sera l'adresse et non le nom de la machine (resp. le numéro et non le nom du service) ; si on ne sait pas trouver dans le serveur de nom le nom de la machine, &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; rendra une erreur si le bit &amp;lt;tt&amp;gt;NI_NAMEREQD&amp;lt;/tt&amp;gt; est positionné et l'adresse numérique sinon ; le bit &amp;lt;tt&amp;gt;NI_DGRAM&amp;lt;/tt&amp;gt; indique si le service est sur UDP et non sur TCP.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Le champ &amp;lt;tt&amp;gt;flags&amp;lt;/tt&amp;gt; permet de modifier la réponse : si flags contient le bit &amp;lt;tt&amp;gt;NI_NUMERICHOST&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;NI_NUMERICSERV&amp;lt;/tt&amp;gt;) la réponse sera l'adresse et non le nom de la machine (resp. le numéro et non le nom du service) ; si on ne sait pas trouver dans le serveur de nom le nom de la machine, &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; rendra une erreur si le bit &amp;lt;tt&amp;gt;NI_NAMEREQD&amp;lt;/tt&amp;gt; est positionné et l'adresse numérique sinon ; le bit &amp;lt;tt&amp;gt;NI_DGRAM&amp;lt;/tt&amp;gt; indique si le service est sur UDP et non sur TCP.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;div id=&amp;quot;conv&amp;quot;&amp;gt;&lt;/del&gt;Les fonctions de conversion numériques d'adresses&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/div&amp;gt;&lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Les fonctions de conversion numériques d'adresses==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Elles sont l'analogue des fonctions &amp;lt;tt&amp;gt;inet_addr&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;inet_ntoa&amp;lt;/tt&amp;gt; d'IPv4, la seule véritable différence étant qu'elles ont un argument précisant la famille d'adresse et peuvent donc aussi bien convertir les adresses IPv4 que les adresses IPv6. Comme la plupart des programmes manipulent des &amp;lt;tt&amp;gt;struct sockaddr*&amp;lt;/tt&amp;gt;, il est souvent préferable d'utiliser les fonctions &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt;, au besoin avec le flag &amp;lt;tt&amp;gt;AI_NUMERICHOST&amp;lt;/tt&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Elles sont l'analogue des fonctions &amp;lt;tt&amp;gt;inet_addr&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;inet_ntoa&amp;lt;/tt&amp;gt; d'IPv4, la seule véritable différence étant qu'elles ont un argument précisant la famille d'adresse et peuvent donc aussi bien convertir les adresses IPv4 que les adresses IPv6. Comme la plupart des programmes manipulent des &amp;lt;tt&amp;gt;struct sockaddr*&amp;lt;/tt&amp;gt;, il est souvent préferable d'utiliser les fonctions &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt;, au besoin avec le flag &amp;lt;tt&amp;gt;AI_NUMERICHOST&amp;lt;/tt&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eduble</name></author>	</entry>

	<entry>
		<id>http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2955&amp;oldid=prev</id>
		<title>Bruno Deniaud at 10:52, 27 February 2006</title>
		<link rel="alternate" type="text/html" href="http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2955&amp;oldid=prev"/>
				<updated>2006-02-27T10:52:02Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:52, 27 February 2006&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{suivi| L'interface socket | L'interface socket | La commande haah (host-address-address-host) | La commande haah (host-address-address-host) }}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{suivi| L'interface socket | L'interface socket | La commande haah (host-address-address-host) | La commande haah (host-address-address-host) }}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Les primitives &amp;lt;tt&amp;gt;gethostbyname&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gethostbyaddr&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;getservbyname&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getservbyport&amp;lt;/tt&amp;gt; ont été remplacées par les deux primitives indépendantes de la famille d'adresses et normalisées par &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[[Bibliographie#RFC2401bis|[RFC2401bis]]] &lt;/del&gt;&amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; :&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Les primitives &amp;lt;tt&amp;gt;gethostbyname&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gethostbyaddr&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;getservbyname&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getservbyport&amp;lt;/tt&amp;gt; ont été remplacées par les deux primitives indépendantes de la famille d'adresses et normalisées par &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;la RFC 3493 &lt;/ins&gt;&amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; #include &amp;lt;sys/socket.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; #include &amp;lt;sys/socket.h&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bruno Deniaud</name></author>	</entry>

	<entry>
		<id>http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2954&amp;oldid=prev</id>
		<title>Bruno Deniaud at 10:44, 27 February 2006</title>
		<link rel="alternate" type="text/html" href="http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2954&amp;oldid=prev"/>
				<updated>2006-02-27T10:44:56Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 10:44, 27 February 2006&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{suivi| L'interface socket | L'interface socket | La commande haah (host-address-address-host) | La commande haah (host-address-address-host) }}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Les primitives &amp;lt;tt&amp;gt;gethostbyname&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gethostbyaddr&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;getservbyname&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getservbyport&amp;lt;/tt&amp;gt; ont été remplacées par les deux primitives indépendantes de la famille d'adresses et normalisées par [[Bibliographie#RFC2401bis|[RFC2401bis]]] &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; :&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Les primitives &amp;lt;tt&amp;gt;gethostbyname&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gethostbyaddr&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;getservbyname&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getservbyport&amp;lt;/tt&amp;gt; ont été remplacées par les deux primitives indépendantes de la famille d'adresses et normalisées par [[Bibliographie#RFC2401bis|[RFC2401bis]]] &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; :&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L77&quot; &gt;Line 77:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 78:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Si la conversion est réussie, &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; retourne un pointeur vers le tampon où est rangé le résultat de la conversion. Dans le cas contraire, &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; retourne le pointeur nul, ce qui se produit soit lorsque la famille d'adresses n'est pas reconnue, soit lorsque la taille du tampon est insuffisante.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Si la conversion est réussie, &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; retourne un pointeur vers le tampon où est rangé le résultat de la conversion. Dans le cas contraire, &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; retourne le pointeur nul, ce qui se produit soit lorsque la famille d'adresses n'est pas reconnue, soit lorsque la taille du tampon est insuffisante.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{suivi| L'interface socket | L'interface socket | La commande haah (host-address-address-host) | La commande haah (host-address-address-host) }}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bruno Deniaud</name></author>	</entry>

	<entry>
		<id>http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2267&amp;oldid=prev</id>
		<title>Laurent Toutain: /* Les fonctions de conversion numériques d'adresses */</title>
		<link rel="alternate" type="text/html" href="http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2267&amp;oldid=prev"/>
				<updated>2005-12-14T06:24:02Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Les fonctions de conversion numériques d&amp;#039;adresses&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 06:24, 14 December 2005&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L49&quot; &gt;Line 49:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Le champ &amp;lt;tt&amp;gt;flags&amp;lt;/tt&amp;gt; permet de modifier la réponse : si flags contient le bit &amp;lt;tt&amp;gt;NI_NUMERICHOST&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;NI_NUMERICSERV&amp;lt;/tt&amp;gt;) la réponse sera l'adresse et non le nom de la machine (resp. le numéro et non le nom du service) ; si on ne sait pas trouver dans le serveur de nom le nom de la machine, &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; rendra une erreur si le bit &amp;lt;tt&amp;gt;NI_NAMEREQD&amp;lt;/tt&amp;gt; est positionné et l'adresse numérique sinon ; le bit &amp;lt;tt&amp;gt;NI_DGRAM&amp;lt;/tt&amp;gt; indique si le service est sur UDP et non sur TCP.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Le champ &amp;lt;tt&amp;gt;flags&amp;lt;/tt&amp;gt; permet de modifier la réponse : si flags contient le bit &amp;lt;tt&amp;gt;NI_NUMERICHOST&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;NI_NUMERICSERV&amp;lt;/tt&amp;gt;) la réponse sera l'adresse et non le nom de la machine (resp. le numéro et non le nom du service) ; si on ne sait pas trouver dans le serveur de nom le nom de la machine, &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; rendra une erreur si le bit &amp;lt;tt&amp;gt;NI_NAMEREQD&amp;lt;/tt&amp;gt; est positionné et l'adresse numérique sinon ; le bit &amp;lt;tt&amp;gt;NI_DGRAM&amp;lt;/tt&amp;gt; indique si le service est sur UDP et non sur TCP.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Les fonctions de conversion numériques d'adresses==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;div id=&amp;quot;conv&amp;quot;&amp;gt;&lt;/ins&gt;Les fonctions de conversion numériques d'adresses&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/div&amp;gt;&lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Elles sont l'analogue des fonctions &amp;lt;tt&amp;gt;inet_addr&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;inet_ntoa&amp;lt;/tt&amp;gt; d'IPv4, la seule véritable différence étant qu'elles ont un argument précisant la famille d'adresse et peuvent donc aussi bien convertir les adresses IPv4 que les adresses IPv6. Comme la plupart des programmes manipulent des &amp;lt;tt&amp;gt;struct sockaddr*&amp;lt;/tt&amp;gt;, il est souvent préferable d'utiliser les fonctions &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt;, au besoin avec le flag &amp;lt;tt&amp;gt;AI_NUMERICHOST&amp;lt;/tt&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Elles sont l'analogue des fonctions &amp;lt;tt&amp;gt;inet_addr&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;inet_ntoa&amp;lt;/tt&amp;gt; d'IPv4, la seule véritable différence étant qu'elles ont un argument précisant la famille d'adresse et peuvent donc aussi bien convertir les adresses IPv4 que les adresses IPv6. Comme la plupart des programmes manipulent des &amp;lt;tt&amp;gt;struct sockaddr*&amp;lt;/tt&amp;gt;, il est souvent préferable d'utiliser les fonctions &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt;, au besoin avec le flag &amp;lt;tt&amp;gt;AI_NUMERICHOST&amp;lt;/tt&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Laurent Toutain</name></author>	</entry>

	<entry>
		<id>http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2266&amp;oldid=prev</id>
		<title>Laurent Toutain at 06:23, 14 December 2005</title>
		<link rel="alternate" type="text/html" href="http://livre.g6.asso.fr/index.php?title=Les_primitives_de_conversion_entre_noms_et_adresses&amp;diff=2266&amp;oldid=prev"/>
				<updated>2005-12-14T06:23:20Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Les primitives &amp;lt;tt&amp;gt;gethostbyname&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gethostbyaddr&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;getservbyname&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getservbyport&amp;lt;/tt&amp;gt; ont été remplacées par les deux primitives indépendantes de la famille d'adresses et normalisées par [[Bibliographie#RFC2401bis|[RFC2401bis]]] &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int&lt;br /&gt;
 getaddrinfo(const char *nodename, const char *servname,&lt;br /&gt;
 const struct addrinfo *hints, struct addrinfo **res);&lt;br /&gt;
  &lt;br /&gt;
 void freeaddrinfo(struct addrinfo *res);&lt;br /&gt;
  &lt;br /&gt;
 const char *gai_strerror(int errcode);&lt;br /&gt;
&lt;br /&gt;
Le type &amp;lt;tt&amp;gt;struct addrinfo&amp;lt;/tt&amp;gt; est défini comme suit :&lt;br /&gt;
&lt;br /&gt;
 struct addrinfo {&lt;br /&gt;
    int ai_flags;             /* AI_PASSIVE, AI_CANONNAME, ... */&lt;br /&gt;
    int ai_family;            /* PF_xxx */&lt;br /&gt;
    int ai_socktype;          /* SOCK_xxx */&lt;br /&gt;
    int ai_protocol;          /* 0 ou IPPROTO_xxx pour IPv4 et IPv6 */&lt;br /&gt;
    size_t ai_addrlen;        /* la taille de l'adresse binaire ai_addr */&lt;br /&gt;
    char *ai_canonname;       /* le nom complétement qualifié */&lt;br /&gt;
    struct sockaddr *ai_addr; /* l'adresse binaire */&lt;br /&gt;
    struct addrinfo *ai_next; /* la structure suivante dans la liste chaînée */&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; prend en entrée le nom d'une machine (&amp;lt;tt&amp;gt;nodename&amp;lt;/tt&amp;gt;) et le nom d'un service (&amp;lt;tt&amp;gt;servname&amp;lt;/tt&amp;gt;). S'il n'y a pas d'erreur, &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; rend 0 et res pointe sur une liste dynamiquement allouée de &amp;lt;tt&amp;gt;struct addrinfo&amp;lt;/tt&amp;gt;. Chaque élément de cette liste contient la description et l'adresse d'une &amp;lt;tt&amp;gt;struct sockaddr&amp;lt;/tt&amp;gt; initialisée pour fournir l'accès au service servname sur nodename. Les champs &amp;lt;tt&amp;gt;ai_family&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ai_socktype&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;ai_protocol&amp;lt;/tt&amp;gt; ont la valeur utilisable dans l'appel système socket.&lt;br /&gt;
&lt;br /&gt;
Lorsque la liste de résultat n'est plus nécessaire, la mémoire allouée peut être libérée par la primitive &amp;lt;tt&amp;gt;freeaddrinfo&amp;lt;/tt&amp;gt;. En cas d'erreur, &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; rend un code d'erreur non nul qui peut être imprimé par la fonction &amp;lt;tt&amp;gt;gai_strerror&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; peut donner des réponses de la famille d'adresses IPv4 ou IPv6, et des réponses pour les protocoles connectés ou non (&amp;lt;tt&amp;gt;ai_socktype&amp;lt;/tt&amp;gt; peut valoir &amp;lt;tt&amp;gt;SOCK_DGRAM&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;SOCK_STREAM&amp;lt;/tt&amp;gt;). L'argument &amp;lt;tt&amp;gt;hints&amp;lt;/tt&amp;gt; permet de choisir les réponses souhaitées. Un argument égal à &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; signifie que la liste des réponses doit contenir toutes les adresses et tous les protocoles. Sinon &amp;lt;tt&amp;gt;hints&amp;lt;/tt&amp;gt; doit pointer sur une structure dont les champs &amp;lt;tt&amp;gt;ai_family&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ai_socktype&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;ai_protocol&amp;lt;/tt&amp;gt; définissent les types de résultat attendus. Une valeur de &amp;lt;tt&amp;gt;PF_UNSPEC&amp;lt;/tt&amp;gt; du champ &amp;lt;tt&amp;gt;ai_family&amp;lt;/tt&amp;gt; signifie que toutes les familles d'adresse (IPv4 et IPv6) sont admises, un &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; dans les champs &amp;lt;tt&amp;gt;ai_socktype&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;ai_protocol&amp;lt;/tt&amp;gt;) signifie que tous les types de socket (resp. protocole) sont admis. Le champ &amp;lt;tt&amp;gt;ai_flags&amp;lt;/tt&amp;gt; permet de préciser des options supplémentaires.&lt;br /&gt;
&lt;br /&gt;
L'argument &amp;lt;tt&amp;gt;servname&amp;lt;/tt&amp;gt; peut être le nom d'un service ou un nombre décimal. De même, l'argument &amp;lt;tt&amp;gt;nodename&amp;lt;/tt&amp;gt; peut être un nom (au format DNS habituel) ou une adresse sous forme numérique IPv4 ou IPv6 (si &amp;lt;tt&amp;gt;ai_flags&amp;lt;/tt&amp;gt; contient le bit &amp;lt;tt&amp;gt;AI_NUMERICHOST&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;nodename&amp;lt;/tt&amp;gt; doit être sous forme numérique et aucun appel au serveur de nom n'est fait). De plus l'un ou l'autre des arguments &amp;lt;tt&amp;gt;servname&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;nodename&amp;lt;/tt&amp;gt; peut être un pointeur &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, mais pas tous les deux. Si &amp;lt;tt&amp;gt;servname&amp;lt;/tt&amp;gt; est &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, le champ &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; des réponses ne sera pas initialisé (il restera égal à &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt;). Si &amp;lt;tt&amp;gt;nodename&amp;lt;/tt&amp;gt; est &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt;, l'adresse réseau dans les réponses est mis à &amp;quot;non initialisé&amp;quot; (&amp;lt;tt&amp;gt;INADDR_ANY&amp;lt;/tt&amp;gt; en IPv4, &amp;lt;tt&amp;gt;IN6ADDR_ANY_INIT&amp;lt;/tt&amp;gt; en IPv6) si &amp;lt;tt&amp;gt;ai_flags&amp;lt;/tt&amp;gt; contient le bit &amp;lt;tt&amp;gt;AI_PASSIVE&amp;lt;/tt&amp;gt;, et à l'adresse de &amp;quot;loopback&amp;quot; (&amp;lt;tt&amp;gt;INADDR_LOOPBACK&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;IN6ADDR_LOOPBACK_INIT&amp;lt;/tt&amp;gt;) sinon. Le cas &amp;lt;tt&amp;gt;AI_PASSIVE&amp;lt;/tt&amp;gt; sert donc à obtenir des réponses utilisables par un programme serveur dans un ''bind'' pour recevoir des requêtes. Enfin si le bit &amp;lt;tt&amp;gt;AI_CANONNAME&amp;lt;/tt&amp;gt; est positionné, le champ &amp;lt;tt&amp;gt;ai_canonname&amp;lt;/tt&amp;gt; de la réponse contient le nom canonique de &amp;lt;tt&amp;gt;nodename&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La primitive &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; remplace les primitives &amp;lt;tt&amp;gt;gethostbyaddr&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getservbyport&amp;lt;/tt&amp;gt;. Elle effectue la traduction d'une adresse vers un nom :&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int getnameinfo(const struct sockaddr *sa, socklen_t salen,&lt;br /&gt;
 char *host, size_t hostlen,&lt;br /&gt;
 char *serv, size_t servlen, int flags);&lt;br /&gt;
&lt;br /&gt;
En entrée l'argument sa pointe vers une structure d'adresse générique (de type &amp;lt;tt&amp;gt;sockaddr_in&amp;lt;/tt&amp;gt; ou &amp;lt;tt&amp;gt;sockaddr_in6&amp;lt;/tt&amp;gt;) et salen contient sa longueur. Le champ &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;serv&amp;lt;/tt&amp;gt;) doit pointer sur une zone de longueur &amp;lt;tt&amp;gt;hostlen&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;servlen&amp;lt;/tt&amp;gt;) caractères. &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; retourne la valeur &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; si tout est correct et un code d'erreur non nul si une erreur est détectée. S'il n'y a pas d'erreur, le champ &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;serv&amp;lt;/tt&amp;gt;) reçoit en sortie le nom de la machine (resp. du service) correspondant. Les arguments &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;serv&amp;lt;/tt&amp;gt; peuvent être &amp;lt;tt&amp;gt;NULL&amp;lt;/tt&amp;gt; si la réponse est inutile. Deux constantes sont définies pour permettre de réserver des zones de réponses de longueur raisonnable :&lt;br /&gt;
&lt;br /&gt;
 # define NI_MAXHOST 1025&lt;br /&gt;
 # define NI_MAXSERV 32&lt;br /&gt;
&lt;br /&gt;
Le champ &amp;lt;tt&amp;gt;flags&amp;lt;/tt&amp;gt; permet de modifier la réponse : si flags contient le bit &amp;lt;tt&amp;gt;NI_NUMERICHOST&amp;lt;/tt&amp;gt; (resp. &amp;lt;tt&amp;gt;NI_NUMERICSERV&amp;lt;/tt&amp;gt;) la réponse sera l'adresse et non le nom de la machine (resp. le numéro et non le nom du service) ; si on ne sait pas trouver dans le serveur de nom le nom de la machine, &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt; rendra une erreur si le bit &amp;lt;tt&amp;gt;NI_NAMEREQD&amp;lt;/tt&amp;gt; est positionné et l'adresse numérique sinon ; le bit &amp;lt;tt&amp;gt;NI_DGRAM&amp;lt;/tt&amp;gt; indique si le service est sur UDP et non sur TCP.&lt;br /&gt;
&lt;br /&gt;
==Les fonctions de conversion numériques d'adresses==&lt;br /&gt;
&lt;br /&gt;
Elles sont l'analogue des fonctions &amp;lt;tt&amp;gt;inet_addr&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;inet_ntoa&amp;lt;/tt&amp;gt; d'IPv4, la seule véritable différence étant qu'elles ont un argument précisant la famille d'adresse et peuvent donc aussi bien convertir les adresses IPv4 que les adresses IPv6. Comme la plupart des programmes manipulent des &amp;lt;tt&amp;gt;struct sockaddr*&amp;lt;/tt&amp;gt;, il est souvent préferable d'utiliser les fonctions &amp;lt;tt&amp;gt;getaddrinfo&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;getnameinfo&amp;lt;/tt&amp;gt;, au besoin avec le flag &amp;lt;tt&amp;gt;AI_NUMERICHOST&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int&lt;br /&gt;
 inet_pton(af, src, dst)&lt;br /&gt;
 int af;              /* AF_INET ou AF_INET6 */&lt;br /&gt;
 const char *src;     /* l'adresse (chaine de caract.) à traiter */&lt;br /&gt;
 void *dst;           /* le tampon où est rangé le résultat */&lt;br /&gt;
  &lt;br /&gt;
 char *&lt;br /&gt;
 inet_ntop(af, src, dst, size)&lt;br /&gt;
 int af;              /* AF_INET ou AF_INET6 */&lt;br /&gt;
 const void *src;     /* l'adresse binaire à traiter */&lt;br /&gt;
 char *dst;           /* le tampon où est rangé le résultat */&lt;br /&gt;
 size_t size;         /* la taille de ce tampon */&lt;br /&gt;
&lt;br /&gt;
La primitive &amp;lt;tt&amp;gt;inet_pton&amp;lt;/tt&amp;gt; convertit une adresse textuelle en sa forme binaire. Elle retourne &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; lorsque la conversion a été réussie, &amp;lt;tt&amp;gt;0&amp;lt;/tt&amp;gt; si la chaine de caractères qui lui a été fournie n'est pas une adresse valide et &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; en cas d'erreur, c'est-à-dire lorsque la famille d'adresses (premier argument) n'est pas supportée. Actuellement, les deux seules familles d'adresses supportées sont &amp;lt;tt&amp;gt;AF_INET&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;AF_INET6&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La primitive duale &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; convertit une adresse sous forme binaire en sa forme textuelle. Le troisième argument est un tampon destiné à recevoir le résultat de la conversion. Il doit être d'une taille suffisante, à savoir 16 octets pour les adresses IPv4 et 46 octets pour les adresses IPv6. Ces deux tailles sont définies dans le fichier &amp;lt;tt&amp;gt;netinet/in.h&amp;lt;/tt&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 #define INET_ADDRSTRLEN 16&lt;br /&gt;
 #define INET6_ADDRSTRLEN 46&lt;br /&gt;
&lt;br /&gt;
Si la conversion est réussie, &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; retourne un pointeur vers le tampon où est rangé le résultat de la conversion. Dans le cas contraire, &amp;lt;tt&amp;gt;inet_ntop&amp;lt;/tt&amp;gt; retourne le pointeur nul, ce qui se produit soit lorsque la famille d'adresses n'est pas reconnue, soit lorsque la taille du tampon est insuffisante.&lt;/div&gt;</summary>
		<author><name>Laurent Toutain</name></author>	</entry>

	</feed>