C - 侦听多次调用套接字 - 预期行为?

  • 本文关键字:套接字 调用 c linux sockets
  • 更新时间 :
  • 英文 :


>我在使用简单的基于 C 的服务器时注意到一些奇怪的东西 在我的 Linux (4.10.3) 系统上的程序。我不小心打来了电话 在我有的套接字(来自服务器进程)上listen()两次 之前叫bind()。我注意到两个听电话 成功,没有任何错误。事实上,多少似乎并不重要 打电话听我,所有听的电话都成功了。

我期待在第一个失败后所有呼叫都听 与EADDRINUSE.我错过了什么吗?Linux/POSIX 手册页没有 似乎对此说了什么。我确实找到了一个关于 以下网页上的此行为:

https://www.mkssoftware.com/docs/man3/listen.3.asp

应用程序可以在同一套接字上多次调用 listen()。 这具有更新侦听的当前积压工作的效果 插座。挂起的连接是否应多于新的积压工作 值,则多余的挂起连接将重置并丢弃。

我不清楚这是否也适用于Linux。所以我的问题是: 当侦听在同一个套接字上多次调用时会发生什么 同样的过程?(显然用户空间中没有明显的副作用, 但是 Linux 内核在内核空间中做了一些特别的事情吗?

谢谢。

Linux 内核使用新的积压值调整积压队列长度,但仅适用于将来的连接请求。它不会丢弃队列中已有的任何挂起连接。

listen()的第二次和后续调用没有其他影响,并且不会失败,除非套接字类型错误(不是SOCK_STREAM),或处于错误状态(已连接到特定对等体,或已在关闭过程中)。

最新更新