看到下面的代码:什么IP地址不接受退货
我的客户从本地主机连接。 我在输出中得到了一个荒谬的地址。这不是我的IP地址。每当我运行代码我得到一个不同的IP地址。当我ping那个IP地址时,我没有得到任何回应。
是什么原因。
我在windows vista的虚拟机上运行suse linux。
更新:
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;
这个返回地址为0.0.0.0
如果我取消注释行,我得到了所有行的正确地址,127.0.0.1
我在代码中看到一个信号量 - 确保其他线程不会同时使用相同的地址结构。即这可能是一种竞争条件。 –
该代码不会将'slen'参数初始化为accept调用。确保你将slen设置为sizeof(cliaddr)。 – nos
@Nikolai:只有一个线程运行 –