在重新启动的服务器上重新连接connect()返回-Transport端点已连接

Ans*_*hul 2 c sockets networking

好的,我已经阅读了这篇文章以寻找正确答案,但它似乎没有达到我的目的.

这个问题

现在,遇到麻烦:

我在C中有一个传统的客户端 - 服务器架构(所有套接字都是非阻塞的),服务器正在侦听传入连接,客户端尝试连接.第一次连接成功,一切都很顺利,直到我在服务器上按Ctrl + C.

代码的客户端检测到连接丢失并设置重试计时器.客户端代码应该通过在每个定时器弹出时使用POSIX间隔定时器来反复尝试重新连接服务器.但是,它不会关闭插座或重新开始.现在,每次重试连接时,connect()都会返回

传输端点已连接

即使重新启动使用SO_REUSEADDR并成功启动的服务器,连接也无法完成.我需要实现的一件事是服务器上用于在Ctrl + C上关闭的信号处理程序.

但是,我是否需要在客户端关闭套接字描述符并在每次断开连接时重新开始,或者有没有办法解决这个问题?

alk*_*alk 5

套接字不能重用.

一旦所提供的套接字在两个方向上都断开连接,套接字就无法使用.

close() 客户端套接字丢失连接并为新连接创建新套接字.


更新(根据以下评论):

在OP的情况下,一侧(服务器端)发生故障(通过服务器进程结束).这意味着该过程持有的所有套接字都是隐式close()编辑的,因此shutdown()在两个方向上都是如此.