繁体   English   中英

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

[英]Does the connection timeout if the client never sends a FIN packet to close the connection?

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

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

如果是这样,我不需要在我的通道管道中添加一个 Read/WriteTimeoutHandler,当定时器触发超时时关闭通道。 无论哪种方式我都必须关闭通道,否则我会泄漏资源。

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

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

根据TCP状态图,双方都应该发送FIN来关闭双方的连接。 但是,如果在您的情况下 FIN 丢失,TCP 将通过适当的超时值克服。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM