3

在用 Linux C 编写的 tcp 程序中,我想关闭我使用的 tcp 连接我close(sockfd) 注意到这个函数将向另一个对等方发起一个 FIN/ACK 数据包,但是如果另一个对等方由于网络问题或 tcp 序列号而没有响应 ACK不一致(例如,其他对等方的 tcp 堆栈崩溃)然后似乎无法关闭 tcp 连接它将始终处于 FIN_WAIT1 状态

如何处理?在这种情况下如何关闭 tcp 连接?

4

2 回答 2

-1

TCP 处理它。你不必处理它。你不能处理它。

于 2013-05-04T10:08:26.887 回答
-1

默认情况下,这由 TCP 实现根据与系统相关的系统范围的配置参数透明地处理。

这可以通过使用设置SO_LINGER套接字选项来覆盖setsockopt(),在这种情况下,调用close()阻塞直到达到指定的超时。

编辑:我应该补充一点,如果目标是添加一些错误处理,例如记录一条错误消息,说明另一端可能未收到某些数据,则大多数时候使用 SO_LINGER 才值得麻烦。

于 2018-01-19T10:35:03.267 回答