听多次调用套接字 – 预期的行为?

我在Linux(4.10.3)系统上使用简单的基于C的服务器程序时,发现了一些奇怪的事情。 我不小心结束了调用listen()两次在一个套接字(从服务器进程)我已经在早些时候调用bind() 。 我注意到,这两个监听调用成功没有任何错误。 事实上,听多less个电话听我都不重要,所有的电话听都成功了。

我期待所有的电话后,第一个听EADDRINUSE失败。 我错过了什么吗? Linux / POSIX手册页似乎没有说这个。 我在下面的网页上find了关于这种行为的一个参考:

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

应用程序可以在同一套接字上多次调用listen()。 这具有更新监听套接字的当前积压的效果。 如果有更多待处理的连接比新的待办事项值多,则多余的挂起连接将被重置并丢弃。

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

谢谢。

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

第二次和以后的listen()调用没有其他作用,除非套接字类型错误(不是SOCK_STREAM ),或者处于错误的状态(已经连接到特定的对等端,或者已经在进程中)被关闭)。