Linux 为什么accept address参数都是零?

Linux 为什么accept address参数都是零?,linux,sockets,osx-yosemite,Linux,Sockets,Osx Yosemite,使用bsd样式的套接字,我调用: accept(listenfd, &address, &len); 直到今天,这一切都很顺利 从今天开始,我看到地址结构都是零 换句话说,内核不知道客户端的ip地址是什么——或者至少,它拒绝在这个上下文中告诉我这个地址。这在Linux和OS-X上都会发生 不用说,我在我查看的accept手册页上没有看到任何与此问题相关的文档。我对这个话题的讨论也没有找到任何东西 我可以找到很多关于我应该做什么的建议(大部分是相互矛盾的)。也许我会接受一些建议(

使用bsd样式的套接字,我调用:

accept(listenfd, &address, &len);
直到今天,这一切都很顺利

从今天开始,我看到地址结构都是零

换句话说,内核不知道客户端的ip地址是什么——或者至少,它拒绝在这个上下文中告诉我这个地址。这在Linux和OS-X上都会发生

不用说,我在我查看的accept手册页上没有看到任何与此问题相关的文档。我对这个话题的讨论也没有找到任何东西

我可以找到很多关于我应该做什么的建议(大部分是相互矛盾的)。也许我会接受一些建议(
getsockname()
看起来很有希望……)。但我需要了解这里发生了什么


所以。。。为什么会发生这种情况?要使
accept()
像手册页中记录的那样工作,需要做哪些更改?

雷米指出了与本案例相关的答案


调用
accept()
时,需要将
accept()
的第三个参数初始化为在第二个参数中传递的缓冲区字节大小。

listenfd
是IPv4还是IPv6套接字?
地址
声明为什么?您正在初始化
len
?您需要显示您的实际代码。IPv4。地址是struct sockaddr_存储,指向它的指针在传递给accept之前被强制转换为(struct sockaddr*)。我没有初始化len-这可能是我的问题。是的,谢谢,就是这样-现在我发现我错过了手册页中的相关句子。代码中的此问题现已修复。(不过,如果你真的想看的话,我可以指向github上的代码…)