Linux 为什么在addr和addrlen设置为0的情况下调用accept()?
在查看linux可执行文件进行的系统调用时,我发现这一点让我感到奇怪:Linux 为什么在addr和addrlen设置为0的情况下调用accept()?,linux,sockets,64-bit,system-calls,Linux,Sockets,64 Bit,System Calls,在查看linux可执行文件进行的系统调用时,我发现这一点让我感到奇怪: 接受(fd,0,0) 为什么要将addr和addrlen设置为0 我也无法连接到可执行文件正在侦听的端口,但我认为这个accept()调用与此无关。请纠正我的错误。第二个和第三个参数是协议地址及其长度。如果它们不为空accept将用连接的客户端的信息填充它们。如果您不关心或不需要知道客户是谁,您可以将这些值作为NULL传递给accept,它们将不会被返回 这可能看起来更正常 accept(fd, NULL, NULL);
接受(fd,0,0)代码>
为什么要将addr和addrlen设置为0
我也无法连接到可执行文件正在侦听的端口,但我认为这个accept()调用与此无关。请纠正我的错误。第二个和第三个参数是协议地址及其长度。如果它们不为空accept
将用连接的客户端的信息填充它们。如果您不关心或不需要知道客户是谁,您可以将这些值作为NULL传递给accept
,它们将不会被返回
这可能看起来更正常
accept(fd, NULL, NULL);
就用法而言,这可能有点奇怪,我们没有更经常地看到这种形式。很多人都经历了传递sockaddr
结构的麻烦,而且从来没有使用过返回的信息。如果您确实需要这些信息,您可以随时在连接的套接字上调用getpeername
。谢谢。在调查之后,我看到的似乎与你所说的一致。当你不想要地址数据时。