在用Linux C编写的tcp程序中
我想关闭一个TCP连接
我用了close(sockfd)
我注意到这个函数会向另一个对等体发起FIN / ACK包
但是如果另一个对等体由于网络问题或tcp sequnce数量不一致而没有响应ACK(例如其他对等体的tcp堆栈崩溃)
那么似乎tcp连接无法关闭
它将始终处于FIN_WAIT1状态
如何处理? 在这种情况下如何关闭tcp连接?
答案 0 :(得分:-1)
TCP处理它。你不必处理它。你不能处理它。
答案 1 :(得分:-1)
默认情况下,TCP实现根据系统范围的配置参数透明地处理,这些参数与系统有关。
这可以通过使用SO_LINGER
设置setsockopt()
套接字选项来覆盖,在这种情况下,对close()
的调用会阻塞,直到达到指定的超时。
编辑:我应该补充一点,如果目标是添加一些错误处理,例如记录错误消息,说明可能某些数据未被另一端接收,那么使用SO_LINGER的大部分时间都是值得的麻烦。