如果FIN / ACK没有得到ACK响应,如何关闭tcp连接?

时间:2013-05-03 12:28:54

标签: networking tcp network-programming

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

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

2 个答案:

答案 0 :(得分:-1)

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

答案 1 :(得分:-1)

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

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

编辑:我应该补充一点,如果目标是添加一些错误处理,例如记录错误消息,说明可能某些数据未被另一端接收,那么使用SO_LINGER的大部分时间都是值得的麻烦。