在查看linux可执行文件所做的系统调用时,我看到这个让我感到奇怪的是:
accept(fd, 0, 0);
为什么将addr和addrlen设置为0?
我也无法连接到可执行文件正在侦听的端口,但我不认为这个accept()调用与此有关。如果我错了,请纠正我。
答案 0 :(得分:2)
第二个和第三个参数是协议地址及其长度。如果它们不是NULL accept
将使用连接的客户端的信息填充它们。如果您不在乎或者不需要知道客户端是谁,则可以将这些值作为NULL传递给accept
,并且不会返回它们。
这可能看起来更正常
accept(fd, NULL, NULL);
就使用而言,我们可能不会经常看到这种形式,这可能有点奇怪。很多人都经历了传递sockaddr
结构的麻烦,并且从不使用返回的信息。如果您确实需要该行的信息,您可以随时在连接的套接字上调用getpeername
。