Obtenir l’adresse IP du descripteur de socket?

J’ai ouvert un serveur de socket TCP (j’ai omis quelques trucs, c’est pris d’ ici

sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) 

Est-il possible d’obtenir l’adresse IP du serveur à partir de sockfd? Si non, où devrais-je chercher?

EDIT: Je veux connaître l’adresse du serveur (c’est avant tout client se connecte).

Si vous voulez savoir qui se trouve à l’autre bout de votre socket, vous pouvez utiliser getpeername sous Linux. getsockname vous dira qui vous êtes. Vous décidez quelle adresse sur laquelle vous voulez que votre serveur siège initialement, au moment de la connexion .

Vous pouvez également trouver cette question SO utile: lien socket vers interface réseau

Et le livre “Unix Network Programming, vol 1” de W. Richard Stevens.

Vous ne pouvez pas utiliser le socket pour obtenir l’adresse du serveur avant qu’un client ne se connecte, car elle n’est pas connue.

En principe, un hôte peut avoir plusieurs adresses IP. L’adresse IP utilisée pour une connexion à un serveur est celle appartenant à l’interface par laquelle la connexion est arrivée. Jusqu’à ce qu’une connexion arrive, elle n’est pas connue.
Même si vous n’avez qu’une seule adresse IP, des connexions peuvent arriver de l’intérieur de la machine, auquel cas l’adresse serait 127.0.0.1 .

Donc, le socket en écoute n’a aucune information sur l’IP.
Vous devrez trouver les interfaces de la machine et leur adresse IP.

L’adresse du serveur est à vous.

Dépend des parameters passés à la fonction bind() .

Vous pouvez spécifier une single ip adresse single ip ou lier votre socket à chaque adresse de votre hôte.

Regardez la page de manuel de liaison

L’adresse du serveur est celle qui a été transmise à l’appel bind() de bind() (comme indiqué dans la source que vous avez liée).