J'écris mon premier programme de socket sous Linux et j'essaie d'imprimer l'adresse IP et le port du pair auquel je me suis connecté. J'utilise getpeername() avec inet_ntop() et ntohs() pour extraire les données de la structure sockaddr_in. Quand je regarde les résultats, j'obtiens une adresse IP qui ne va à aucun serveur que je sache (ping échoue) et dit que j'écoute un port que netstat dit n'est pas utilisé.getpeername() renvoie des données incorrectes
Qu'est-ce que je fais mal? Je devrais obtenir 130.215.28.181:39000, mais à la place je reçois 209.94.72.137:18825 chaque fois que j'exécute le programme. En regardant netstat montre que je suis en effet à l'écoute sur le port 39000.
Voici un extrait de mon programme client:
connect(sockfd,&serv_addr,sizeof(serv_addr))
// print welcome message
char ipstr[INET6_ADDRSTRLEN];
bzero(ipstr, 50);
struct sockaddr_in *address;
socklen_t address_len = sizeof(*address);
getpeername(sockfd, (struct sockaddr *) address, &address_len);
inet_ntop(AF_INET, &address->sin_addr, ipstr, sizeof(ipstr));
printf("Connection established successfully with %s:%i!\n", ipstr, ntohs(address->sin_port));
C'est à ce moment-là que je me souviens pourquoi j'ai une forte aversion pour C. –
@Chris Lieb: discipline mon ami, discipline ... –
Cela pourrait être mauvais si l'adresse struct est en fait un 'sockaddr_in6' – 735Tesla