How to change tcp keepalive timer using python script?
You can set the TCP keepalive timers on an already-open socket using setsockopt().
import socketdef set_keepalive_linux(sock, after_idle_sec=1, interval_sec=3, max_fails=5): """Set TCP keepalive on an open socket. It activates after 1 second (after_idle_sec) of idleness, then sends a keepalive ping once every 3 seconds (interval_sec), and closes the connection after 5 failed ping (max_fails), or 15 seconds """ sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, after_idle_sec) sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, interval_sec) sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, max_fails)def set_keepalive_osx(sock, after_idle_sec=1, interval_sec=3, max_fails=5): """Set TCP keepalive on an open socket. sends a keepalive ping once every 3 seconds (interval_sec) """ # scraped from /usr/include, not exported by python's socket module TCP_KEEPALIVE = 0x10 sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) sock.setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE, interval_sec)
For equivalent options on windows refer to msdn.Looking through the Python source, it seems you need to set SO_KEEPALIVE
with sock.setsockopt
similar to in Unix, and [optionally?] set SIO_KEEPALIVE_VALS
with sock.ioctl
.
For windows, in python:
This will enable socket keep alive, with a 10 second keep alive time and a 3 second keep alive interval.
sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))
More detailed info here