Почему TCP-соединение разрывается слишком рано?

Я запускаю следующую программу Python во FreeBSD:

#!/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 метод)?!

Мне нужно запустить мое TCP-соединение в течение длительного периода времени, но я не нашел никакого способа сделать это, кроме отправки сообщений ping, не имеющих смысла. Есть ли другой путь?!

1 ответ

Настройка ядра для проверки связи с:

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

решает проблему.

После таких настроек соединение не разрывается, как мне нужно.

Другие вопросы по тегам