C语言 在重启的服务器上使用connect()重新连接返回-传输端点已经连接



好吧,我读了这篇文章是为了寻找正确的答案,但它似乎不符合我的目的。

这个问题

现在,麻烦来了:

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

代码的客户端检测到连接丢失并设置重试计时器。客户端代码应该通过在每次计时器弹出时使用POSIX间隔计时器一次又一次地尝试在服务器上重新连接。但是,它不会关闭套接字或重新启动。现在,每次它重新尝试连接时,connect()都会返回

传输端点已连接

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

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

套接字不能被重用。

一旦一个套接字所服务的连接在两个方向上都中断,该套接字将不可用。

close()在客户端丢失连接时创建一个新的套接字。


更新(基于下面的注释):

在OP的情况下,一端(服务器端)关闭(由于服务器进程结束)。这意味着该进程持有的所有套接字都隐式地为close() ed,因此在两个方向上都是shutdown()

最新更新