2

好的,我已经阅读了这篇文章以寻找正确的答案,但它似乎不符合我的目的。

这个问题

现在,解决问题:

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

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

传输端点已连接

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

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

4

1 回答 1

5

套接字不能重复使用。

一旦一个套接字服务的连接在两个方向都断开了,这个套接字就不能使用了。

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


更新(基于以下评论):

在 OP 的情况下,一侧(服务器端)出现故障(通过服务器进程结束)。这意味着该进程持有的所有套接字都是隐式close()编辑的,因此shutdown()是双向的。

于 2013-06-04T06:19:48.083 回答