在我的C++应用程序中,我使用::bind()作为UDP套接字,但在极少数情况下,由于连接丢失而重新连接后,我会得到errno EADDRINUSE,即使在多次重试之后也是如此。UDP连接的另一端将接收重新连接的数据,并等待select()指示有要读取的内容。
我认为这意味着本地端口正在使用中。如果是真的,我如何泄漏本地端口,以便另一端能够正常连接到它?这里真正的问题是另一端连接得很好,正在等待,但这一端被EADDRINUSE卡住了。
-编辑--
下面的代码片段显示我已经在我的TCP套接字上执行了SO_REUSEADDR,而不是在我遇到问题的这个UDP套接字上:
// According to
如果进程是在打开udp套接字之后派生的,在Linux系统上如何处理select for reading?尤其是-在这种程序中有没有可能:
so = open socket
fork
for(;;) {
select() for reading on socket so
recv from so
}
两个数据包将只唤醒其中一个进程(如果它们在等待进程被通知/退出选择之前到达),并且这些数据包中的第二个将不会被接收到?
或者,我是否可以假设对于UDP,每个数据包都将始终唤醒一个进程或保留标志设置?
linux上有一个活动的ufw .nmap -sT -O localhost的输出是:
Starting Nmap 6.40 ( http://nmap.org ) at 2019-05-27 22:59 EEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00019s latency).
All 1000 scanned ports on localhost (127.0.0.1) are closed
Warning: OSScan results may be unreliable because we could