对于不耐烦:
如何改变的价值/proc/sys/net/ipv4/tcp_retries2在Linux中单个连接,使用setsockopt(),ioctl()或者这样,或者是这可能吗?
更长的解密:
我正在开发一个使用长轮询HTTP请求的应用程序.在服务器端,需要知道客户端何时关闭连接.准确性并不重要,但肯定不能是15分钟.接近一分钟就可以了.
对于不熟悉该概念的人,长轮询HTTP请求的工作方式如下:
在我的应用程序中,服务器每隔一段时间就向客户端发送"心跳"(默认为30秒).心跳只是一个作为响应块发送的换行符.这是为了保持线路忙,以便我们通知连接丢失.
客户端正常关闭时没有问题.但是当它强制关闭时(例如客户端机器断电),不会发送TCP重置.在这种情况下,服务器发送心跳,客户端不会发送确认.在此之后,服务器在放弃并向应用层(我们的HTTP服务器)报告失败后,继续重传该数据包大约15分钟.在我的情况下等待15分钟太久了.
我可以通过写入以下文件来控制重传时间/proc/sys/net/ipv4/:
tcp_retries1 - INTEGER
This value influences the time, after which TCP decides, that
something is wrong due to unacknowledged RTO retransmissions,
and reports this suspicion to the network layer.
See tcp_retries2 for more details.
RFC 1122 recommends at least 3 retransmissions, which is the
default.
tcp_retries2 - INTEGER
This value influences the timeout of an alive TCP connection,
when RTO retransmissions …Run Code Online (Sandbox Code Playgroud)