闲置连接超时

2024-05-26 21:51:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用asyncore和asynchat模块来构建一个SMTP服务器(我使用smtpd lib中的代码来构建SMTP服务器),但是我有一个连接超时的问题。当我打开到SMTP服务器的telnet连接并保持这种连接时,虽然没有发生数据交换,但是连接还是建立了。我想设置超时,例如30秒,并在客户端没有任何消息的情况下关闭服务器的空闲连接(否则很容易出现DOS漏洞)。我在google上搜索解决方案,阅读了源代码和文档,但没有找到任何有用的东西。在

谢谢


Tags: 模块代码服务器消息客户端lib情况smtp
1条回答
网友
1楼 · 发布于 2024-05-26 21:51:03

根据asyncoredocumentationasyncore.loop()有一个超时参数,默认为30秒。所以显然违约时间应该是30秒,你可以试着用它来满足你自己的需要。在

The timeout argument sets the timeout parameter for the appropriate select() or poll() call, measured in seconds; the default is 30 seconds.


好的,上面实际指的是poll()或{}超时,而不是空闲超时。 根据this page,您可以使用asyncore来支持如下超时:

将下面的块添加到您自己的asyncore.poll副本中,就在for fd in e:块之后。。。在

#handle timeouts
rw = set(r) + set(w)
now = time.time()
for f in (i for i in rw if i in map):
    map[f].lastdata = now
    for j in (map[i] for i in map if i not in rw):
        if j.timeout+j.lastdata now:
            #timeout!
            j.handle_close()

您将需要初始化的.timeout和.lastdata成员 每一个实例,但这应该不是那么糟糕(对于一个 不会超时,我建议暂停1小时或1天)。在

相关问题 更多 >

    热门问题