使用bsd样式套接字,我打电话:
accept(listenfd, &address, &len);
直到今天,这都很好。
从今天开始,我一直看到地址结构都是零。
换句话说,内核不知道客户端的IP地址是什么 - 或者至少,它拒绝在这种情况下告诉我该地址。在Linux和OS-X上都会发生这种情况。
毋庸置疑,我在审核的接受手册页上看不到与此问题相关的任何文档。我对此主题的讨论也没有找到我的任何内容。
我可以找到很多(主要是冲突的)建议,而不是我应该做什么。也许我会接受一些建议(getsockname()
看起来很有希望......)。但我需要了解这里发生的事情。
那么......为什么会这样呢?需要改变什么才能使accept()
按照手册页中的说明工作?
答案 0 :(得分:0)
雷米指出了与此案有关的答案。
调用accept()
时,需要将accept()
的第三个参数初始化为第二个参数中传递的缓冲区的字节大小。