首页 文章

如果客户端从不发送FIN数据包来关闭连接,连接是否会超时?

提问于
浏览
2

我有一个用Netty实现的HTTP服务器 . 它需要长轮询连接才能将消息推送到浏览器 . 在大多数情况下,服务器不会尝试关闭连接 .

在TCP会话中,如果任何一方想要关闭连接,它会向另一方发送FIN数据包 . 如果服务器没有从客户端接收FIN,例如1)用户有硬网络故障或2)有人试图攻击服务器,是否保证Netty服务器将收到超时(或其他在给定时间后出现异常?

如果是这样,我不需要在我的通道管道中添加一个Read / WriteTimeoutHandler,当Timer触发超时时,它会关闭通道 . 我必须以任何一种方式关闭通道,否则我会泄漏资源 .

2 回答

  • 0

    是否保证Netty服务器在给定时间后会收到超时(或其他类型)异常?

    不会 . 如果套接字处于阻塞模式并且已设置读取超时,则会抛出 SocketTimeoutException . 如果已启用TCP keepalive并且连接确实在2小时内保持断开,则可能会发生 IOException: connection reset :这不包括对等方仅仅保持连接保持运行的情况 . 否则没有 .

  • 2

    根据TCP状态图,双方FIN应该被发送以关闭双方的连接 . 但是,如果FIN丢失,那么TCP将通过适当的超时值来克服 .

相关问题