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

标签 java networking tcp netty tcplistener

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

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

如果它是真的,我不需要将 Read/WriteTimeoutHandler 添加到我的 channel 管道中,它会在计时器触发超时时关闭 channel 。我必须以任何一种方式关闭 channel ,否则我会泄漏资源。

最佳答案

is it guaranteed that the Netty server will receive a timeout (or other kind of) exception after a given time?

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

关于java - 如果客户端从不发送 FIN 数据包关闭连接,连接是否超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622676/

相关文章:

c++ - QT UDP 套接字返回空数据报

c++ - Linux 在多线程程序中处理特定线程上的信号

c - 通过套接字发送数据时,ENOENT 是什么意思?

c++ - 是否可以使用 WFP 发送带有有效负载的 tcp syn 数据包?

java - thymeleaf Spring如何将复杂对象发送到 Controller

java - JAVA 中的 MySQLSyntaxErrorException

java - Groovy 中的日期格式匹配

java - 如何对这个类进行类型转换?

java - Spring集成TCP服务器打印传入消息

java - Spring Integration TCP 连接在多线程负载/压力测试下被拒绝