为什么TCP连接太早断开



我在freebsd上运行以下python程序:

#!/usr/bin/python
import socket
host = ''
port = 9000
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind((host, port))
serversocket.listen(5)
while True:
    sock, address = serversocket.accept()
    print("Connected ", address)
    sock.settimeout(3600)
    data = sock.recv(4096)
    sock.close()
    print("Disconnected")

然后,我将其连接到telnet XXX 9000。连接在5分钟和几秒钟后断开。为什么300秒后(实际上是304秒)而不是3600秒(我在settimeout方法中设置的304秒)?!

我需要长时间运行我的TCP连接,但是除了发送无义的ping消息外,我没有找到这样做的方法。还有其他方法吗?!

将内核设置为ping与:

sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 150)
sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 150)

解决了问题。

在此类设置之后,连接不会按照我的需要破裂。

相关内容

  • 没有找到相关文章

最新更新