使用bsd样式的套接字,我调用:
accept(listenfd, &address, &len);
直到今天,这一切都很顺利。
从今天开始,我看到地址结构都是零。
换句话说,内核不知道客户端的ip地址是什么——或者至少,在这种情况下,它拒绝告诉我这个地址。这种情况在Linux和OS-X上都会发生。
不用说,在我审查过的验收手册页上,我没有看到任何与此问题相关的文档。我在搜索关于这个话题的讨论时也没有找到任何东西。
我可以找到很多关于我应该做什么的建议。也许我会接受一些建议(getsockname()
看起来很有希望…)。但我需要了解这里发生了什么。
所以。。。为什么会发生这种情况?要使accept()
按照手册页中的记录工作,需要做哪些更改?
Remy指出了与本案相关的答案。
调用accept()
时,accept()
的第三个参数需要初始化为第二个参数中传递的缓冲区的字节大小。