好的,我已经阅读了这篇文章以寻找正确的答案,但它似乎没有达到我的目的。
现在,遇到麻烦:
我在C中有一个传统的客户端 - 服务器架构(所有套接字都是非阻塞的),服务器正在侦听传入连接,客户端尝试连接。第一次连接成功,一切正常,直到我在服务器上按Ctrl + C.
代码的客户端检测到连接丢失并设置了重试计时器。 客户端代码应该通过在每个定时器弹出时使用POSIX间隔定时器来反复尝试重新连接服务器。但是,它不会关闭插座或重新开始。现在,每次重试连接时,connect()都会返回
传输端点已连接
即使重新启动使用SO_REUSEADDR并成功启动的服务器,连接也无法完成。 我需要实现的一件事是服务器上的信号处理程序,用于在Ctrl + C上关闭。
但是,我是否需要在客户端关闭套接字描述符并在每次断开连接时重新开始,或者是否有办法解决这个问题?
答案 0 :(得分:5)
套接字无法重复使用。
一旦连接服务的套接字在两个方向上都断开,套接字就无法使用。
close()
客户端套接字失去连接并为新连接创建一个新套接字。
更新(根据以下评论):
在OP的情况下,一方(服务器端)发生故障(通过服务器进程结束)。这意味着此过程持有的所有套接字都隐式close()
,因此shutdown()
在两个方向上。