【问题标题】: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

【讨论】:

  • 谢谢。看了之后,我看到的好像和你说的一致。
猜你喜欢
  • 2014-07-13
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2012-03-02
相关资源
最近更新 更多