如果客户端没有发送FIN数据包关闭连接,那么连接会超时吗?

3
我使用Netty实现了一个HTTP服务器。它接收长轮询连接,向浏览器推送消息。通常情况下,服务器不会主动关闭连接。
在TCP会话中,如果任意一方希望关闭连接,它会向对方发送一个FIN数据包。但是,如果服务器没有从客户端收到FIN数据包,在以下情况下:1)用户遇到网络故障 2)有人试图攻击服务器,那么Netty服务器是否保证会在一定时间后收到超时(或其他类型的)异常呢?
如果是这样的话,我就不需要在我的通道管道中添加一个Read/WriteTimeoutHandler,该处理程序在计时器触发超时时关闭通道。我必须以任何方式关闭通道,否则将会泄漏资源。
2个回答

2
“Netty服务器是否保证在一定时间内会收到超时(或其他类型的)异常?”
答案是不一定。如果套接字处于阻塞模式并设置了读取超时,则会抛出“SocketTimeoutException”异常。如果启用了TCP keepalive并且连接真正断开了2小时,可能会发生“IOException:connection reset”的异常;这不包括对等方保持沉默但连接仍然有效的情况。否则,不会有异常发生。

0
根据TCP状态图,双方都应发送FIN来关闭连接。但是,如果FIN丢失,就像在你的情况中,TCP将使用适当的超时值来解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接