Se connecter

Informatique

Programmation

Sujet : [C] Utilisation getaddrinfo en réseau
1
[hard]ware
Niveau 14
25 mars 2019 à 19:44:47

Salut :ok:

La fonction server_socket essaie de créer une socket d’écoute sur le port associé au service
transmis en paramètre. La socket écoutera sur toutes les interfaces réseaux de la machine. Elle
pourra utiliser le protocole IPv4 ou IPv6 en fonction des piles de protocoles présentes sur la
machine. En cas d’échec (que ce soit lors de la manipulation des adresses ou de la création de
la socket d’écoute) la fonction retournera -1.
https://pastebin.com/zg4C8NAS

Dans cette fonction, je ne comprends pas la boucle for.
C'est quelque chose qu'on retrouve souvent (toujours ?) avec la manipulation de getaddrinfo.
On le retrouve également dans le manuel : https://pastebin.com/m6LExk1Y

Mais je n'arrive pas à me faire une explication claire dans ma tête. Quelles sont exactement toutes ces adresses retournées ? Pourquoi ça marche ou ça marche pas ? Pourquoi on a besoin d'une boucle ? Pourquoi même il y a plusieurs choses ?
C'est vraiment flou tout ça :doute:

Si vous pouviez m'expliquer un peu plus simplement et surtout en français....

:merci:

boboboris1719
Niveau 2
25 mars 2019 à 21:55:06

Hello,

tu m'as fait ressortir mon cours de réseau lol,
j'ai relu le manuel et j'ai trouvé ça :

The getaddrinfo() function allocates and initializes a linked list of

addrinfo structures, one for each network address that matches node
and service, subject to any restrictions imposed by hints, and
returns a pointer to the start of the list in res. The items in the
linked list are linked by the ai_next field.
There are several reasons why the linked list may have more than one
addrinfo structure, including: the network host is multihomed, acces‐
sible over multiple protocols (e.g., both AF_INET and AF_INET6); or
the same service is available from multiple socket types (one
SOCK_STREAM address and another SOCK_DGRAM address, for example).
Normally, the application should try using the addresses in the order
in which they are returned. The sorting function used within getad‐
drinfo() is defined in RFC 3484; the order can be tweaked for a par‐
ticular system by editing /etc/gai.conf (available since glibc 2.5).

donc si je comprend bien, la structure addrinfo est une liste chaînée qui va contenir plusieurs réponses fournis par la fonction getaddrinfo, il peut y avoir plusieurs réponses en fonction de la configuration de ton réseau. Par exemple si ton réseau est "multihomed" alors il est connecté à plusieurs fournisseur d'accès à internet, cela permet d'augmenter la fiabilité de ta connexion internet. Du coup dans ces conditions on peut imaginer que si une connexion à internet foire à cause d'un problème avec un de tes FAI, le fait d'avoir plusieurs réponses fournie par getaddrinfo te permet de retenter la connexion avec un autre, puis un autre jusqu'à ce que ça marche (ou pas)

1
Sujet : [C] Utilisation getaddrinfo en réseau
   Retour haut de page
Consulter la version web de cette page