voir le code suivant:quelle adresse IP ne soit accepter le retour
accept(sockfd, (struct sockaddr*)&cliaddr, &slen);
cout << inet_ntop(AF_INET, cliaddr.sin_addr, ipv4addr, 100);
mon client se connecte depuis localhost. je reçois une adresse absurde dans la sortie. Ce n'est pas mon adresse IP. Chaque fois que je lance le code, j'obtiens une adresse IP différente. Quand je ping cette adresse IP je ne reçois aucune réponse.
quelle est la raison. Je cours Suse Linux sur une machine virtuelle dans Windows Vista.
Mise à jour:
bzero(&cliaddr, sizeof(cliaddr));
int connfd = accept(sockfd, (struct sockaddr*)&cliaddr, &slen);
if (sem_wait(&mutex) < 0)
err_sys("sem_init error");
char ipv4addr[100];
cout << inet_ntop(AF_INET, &cliaddr.sin_addr, ipv4addr, 100) << endl;
//const char* p = inet_ntop(AF_INET, &cliaddr.sin_addr, ipv4addr, 100);
//cout << p << endl;
//cout << (void*)p << " " << (void*)ipv4addr << endl;
cette adresse de retour comme 0.0.0.0
si je décommenter les lignes, je reçois l'adresse correcte dans toutes les lignes, 127.0.0.1
Je vois un sémaphore dans votre code - assurez-vous que les autres threads n'utilisent pas la même structure d'adresse en même temps. C'est à dire. Cela pourrait être une condition de course. –
Ce code n'initialise pas le paramètre 'slen' à l'appel accepté. Assurez-vous de régler slen à sizeof (cliaddr). – nos
@Nikolai: un seul thread en cours d'exécution –