Я нашел ответ, это зависит от настроек поддержки активности TCP:
Для списка доступных параметров TCP (FreeBSD 4.8 и 5.4):
sysctl -A | grep net.inet.tcp
net.inet.tcp.keepidle
- количество времени в миллисекундах, что) соединение (TCP должен быть неактивным до пр оставайся в живых отправляются сообщения (если разрешено).
net.inet.tcp.keepintvl
- Интервал в миллисекундах между датчиками keepalive, отправленными на удаленные машины. После отправки пробников TCPTV_KEEPCNT (по умолчанию 8), без ответа, соединение (TCP) будет удалено.
net.inet.tcp.always_keepalive
- Предположим, что SO_KEEPALIVE установлен во всех TCP-соединениях, ядро периодически отправляет пакет на удаленный хост, чтобы проверить, что соединение все еще включено.
Поэтому формула для вычисления максимального времени TCP неактивного соединения имеет следующий вид:
net.inet.tcp.keepidle + (net.inet.tcp.keepintvl x 8)
результата в миллисекундах. Поэтому, установив
net.inet.tcp.keepidle = 10000 net.inet.tcp.keepintvl = 5000 net.inet.tcp.always_keepalive = 1 (must be 1 always)
система будет отключить вызов, когда соединение TCP мертв для: 10000 + (5000 x 8) = 50000
мс (50 сек).Чтобы система запомнила эти настройки при запуске, вы должны добавить их в файл /etc/sysctl.conf
.
Следует ли это применять на стороне сервера? – netvope
Я не пробовал, но я думаю, что да, на стороне сервера: [TCP Keepalive] (http://jampad.net/Library/tcpipprot/ch17.html): Если пользователь должны были установить соединение, выполните некоторую работу, затем просто выключите компьютер в конце дня, не отпуская, будет открыто полуоткрытое соединение. Если клиент исчезает, оставляя полуоткрытое соединение на сервере, а сервер ждет некоторых данных от клиента, сервер будет ждать всегда. Функция keepalive предназначена для обнаружения этих полуоткрытых соединений со стороны сервера. –
Возможно ли иметь прокси для моей спящей системы, которая могла бы отправлять пакеты на сервер? Таким образом, сеанс можно было сохранить даже после сна. – sudeepdino008