[英]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.