你为什么要用addr和addrlen设置为0来调用accept()?

时间:2013-07-14 02:15:25

标签: linux sockets 64-bit system-calls

在查看linux可执行文件所做的系统调用时,我看到这个让我感到奇怪的是:

accept(fd, 0, 0);

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

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

1 个答案:

答案 0 :(得分:2)

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

这可能看起来更正常

accept(fd, NULL, NULL);

就使用而言,我们可能不会经常看到这种形式,这可能有点奇怪。很多人都经历了传递sockaddr结构的麻烦,并且从不使用返回的信息。如果您确实需要该行的信息,您可以随时在连接的套接字上调用getpeername