首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python脚本更改tcp保持连接计时器?

如何使用python脚本更改tcp保持连接计时器?
EN

Stack Overflow用户
提问于 2012-09-03 20:42:44
回答 2查看 40.4K关注 0票数 36

在我的python脚本中,我使用以下命令激活了TCP Keepalive:

代码语言:javascript
复制
x = s.setsockopt( socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

我的目标是关闭套接字连接,如果5分钟内没有传输(*)。我在Windows上工作,我的python脚本只接收而不是传输任何数据到客户端程序。

我所知道的是,默认情况下,如果2小时内没有传输,那么只有我可以使用try and except关闭连接。我知道,对于windows,我可以通过转到注册表来手动减少等待时间。但是有没有一种方法,我可以从我的脚本中修改它?

(*)这里的“无传输”是指“网络上的某个东西悄悄地吃了数据包”,而不是“我不想发送任何东西”。

EN

回答 2

Stack Overflow用户

发布于 2013-02-13 22:25:22

您可以使用setsockopt()在已经打开的套接字上设置TCP保持连接计时器。

代码语言:javascript
复制
import socket

def 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)

有关windows refer to msdn上的等效选项,请参阅。看一看Python source,似乎你需要用sock.setsockopt来设置SO_KEEPALIVE,就像在Unix中一样,而且是可选的?使用sock.ioctl设置SIO_KEEPALIVE_VALS

票数 69
EN

Stack Overflow用户

发布于 2015-08-07 09:13:29

对于windows,在python中:

这将启用套接字保持活动,具有10秒的保持活动时间和3秒的保持活动间隔。

代码语言:javascript
复制
sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12248132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档