How to change tcp keepalive timer using python script? How to change tcp keepalive timer using python script? python python

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