我在使用简单的基于 C 的服务器时注意到一些奇怪的事情
我的 Linux (4.10.3) 系统上的程序。我不小心打通了电话listen()
我在套接字上两次(来自服务器进程)
被称为bind()
早些时候。我注意到两个监听电话
成功,没有任何错误。事实上,有多少似乎并不重要
我拨打的侦听电话,所有侦听电话均成功。
我期待在第一个失败后所有的调用都会监听
和EADDRINUSE
。我错过了什么吗? Linux/POSIX 手册页没有
似乎对此有什么想说的。我确实找到了一份关于
以下网页上的此行为:
https://www.mkssoftware.com/docs/man3/listen.3.asp https://www.mkssoftware.com/docs/man3/listen.3.asp
应用程序可以在同一个套接字上多次调用listen()。
这具有更新当前监听积压的效果
插座。挂起的连接是否应该多于新的待办事项
值时,多余的挂起连接将被重置并丢弃。
我不清楚这是否也适用于 Linux。所以我的问题是:
当在同一个套接字上多次调用listen时会发生什么
相同的过程? (显然用户空间中没有明显的副作用,
但是 Linux 内核在内核空间做了一些特殊的事情吗?)
Thanks.
Linux 内核使用新的积压值调整积压队列长度,但仅限于将来的连接请求。它不会丢弃队列中已有的任何待处理连接。
第二次及后续调用listen()
没有其他影响,并且不会失败,除非套接字类型错误(不是SOCK_STREAM
),或处于错误状态(已连接到特定对等点,或已处于关闭过程中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)