1

在查看 linux 可执行文件进行的系统调用时,我看到这个让我觉得很奇怪:

accept(fd, 0, 0);

为什么将 addr 和 addrlen 设置为 0?

我也无法连接到可执行文件正在侦听的端口,但我认为这个 accept() 调用与此无关。如果我对此有误,请纠正我。

4

1 回答 1

2

第二个和第三个参数是协议地址和它的长度。如果它们不为 NULL accept,将用连接的客户端的信息填充它们。如果您不关心或不需要知道客户是谁,您可以将这些值作为 NULL 传递给accept它们,它们将不会被返回。

它可能看起来更正常

accept(fd, NULL, NULL);

在使用方面,我们不经常看到这种形式可能有点奇怪。很多人在传递sockaddr结构时遇到了麻烦,无论如何都不会使用返回的信息。如果您确实需要在线下的信息,您可以随时getpeername在连接的套接字上调用。

于 2013-07-14T02:43:21.680 回答