Linux TCP服务器忽略传入的SYN

Linux TCP服务器忽略传入的SYN,linux,Linux,我有一个tcp服务器正在运行。客户端连接到服务器并定期发送数据包。对于TCP服务器,此传入连接将变为已连接,服务器套接字仍侦听其他连接 假设此客户端突然断电,没有FIN发送到服务器。当它再次通电时,仍然使用相同的端口进行连接,但服务器不响应同步请求。它只是忽略传入的请求,因为存在与此端口的连接 如何让服务器关闭旧连接并接受新连接 我的tcp服务器运行在Ubuntu14.04上,它是一个使用ServerSocket的Java程序。这是不正确的,服务器可以接受多个连接,并且只要从不同的端口连接(通常

我有一个tcp服务器正在运行。客户端连接到服务器并定期发送数据包。对于TCP服务器,此传入连接将变为已连接,服务器套接字仍侦听其他连接

假设此客户端突然断电,没有FIN发送到服务器。当它再次通电时,仍然使用相同的端口进行连接,但服务器不响应同步请求。它只是忽略传入的请求,因为存在与此端口的连接

如何让服务器关闭旧连接并接受新连接


我的tcp服务器运行在Ubuntu14.04上,它是一个使用ServerSocket的Java程序。

这是不正确的,服务器可以接受多个连接,并且只要从不同的端口连接(通常情况下),就会从重新启动的客户机接受新的连接。如果您的程序不接受它,那是因为您没有第二次调用accept()。这可能意味着您的应用程序每次只处理一个阻塞操作(例如,它可能卡在连接的套接字上的read()操作中)。解决方案是同时读取已连接的套接字并接受新连接。这可以使用I/O多路复用器(如select())或多线程来完成。

我在主线程中调用listen(),让其他线程处理传入连接。问题在于,我总是在客户端使用相同的端口。如果使用不同的端口,它是好的,服务器工作。目前,一个解决方法是在服务器中设置读取超时,以检测客户端关机并关闭该套接字。我想知道是否有一个选项可以让服务器在同一端口上接收新SYN时自动关闭旧连接。否,服务器不能被同一端口上的恶意SYN干扰,因为它很容易受到恶意客户端的连接中断。你需要保持活力。