【问题标题】:Why would you ever call accept() with addr and addrlen set to 0?为什么你会在 addr 和 addrlen 设置为 0 的情况下调用 accept()?
【发布时间】:2013-07-12 05:42:18
【问题描述】:
在查看由 linux 可执行文件发出的系统调用时,我发现这个让我觉得很奇怪:
accept(fd, 0, 0);
为什么要将 addr 和 addrlen 设置为 0?
我也无法连接到可执行文件正在侦听的端口,但我认为这个 accept() 调用与此无关。如果我对此有误,请纠正我。
【问题讨论】:
标签:
linux
sockets
64-bit
system-calls
【解决方案1】:
第二个和第三个参数是协议地址和它的长度。如果它们不为 NULL,accept 将用连接的客户端的信息填充它们。如果您不关心或不需要知道客户是谁,您可以将这些值作为 NULL 传递给 accept,它们将不会被返回。
它可能看起来更正常
accept(fd, NULL, NULL);
在使用方面,我们不经常看到这种形式可能有点奇怪。很多人在传递sockaddr 结构时遇到了麻烦,并且无论如何都不会使用返回的信息。如果您确实需要在线下的信息,您可以随时在连接的套接字上调用getpeername。