首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python IRC Bot在240秒后超时

问Python IRC Bot在240秒后超时
EN

Stack Overflow用户
提问于 2012-06-03 12:52:26
回答 3查看 1.4K关注 0票数 2

我正在尝试制作一个IRC机器人,但它在240秒后超时。我该如何解决这个问题呢?

代码语言:javascript
复制
import socket 
host = 'test'
port = 6667
channel = '#test'
nick = "test"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send('NICK ' + str(nick) +  ' \n\r') 
s.send('USER v v v :v Script' + '\r\n')
s.send('JOIN '+channel+' \n\r')

while True:
    command = s.recv(4096)
    print command
EN

回答 3

Stack Overflow用户

发布于 2012-06-03 13:57:59

您没有回复来自服务器的ping请求。

当您长时间空闲时,服务器认为连接已死,并发送一个ping请求,您需要使用pong进行回复(以及ping之后服务器发送给您的任何内容)。所以,如果服务器给你发了这个,那应该是你的回复:

代码语言:javascript
复制
PING :HELLO_WORLD
PONG :HELLO_WORLD

否则,服务器将确认链路已断开并终止连接。

票数 5
EN

Stack Overflow用户

发布于 2012-06-03 13:40:14

您可以尝试使用irclib-但是,最有可能发生的情况是,您没有回复服务器的PING消息。

每当收到以"PING“开头的消息时,您必须使用包含单词PONG和您的程序名称(以及可选的主机)的"PONG”消息进行回复-在"PONG“后面留一个空格。

检查PING和PONG消息的完整IRC规范,并查看您在实验过程中可能遗漏的其他内容:http://www.irchelp.org/irchelp/rfc/rfc.html

票数 1
EN

Stack Overflow用户

发布于 2021-10-16 00:19:35

我的问题是,我甚至不能可靠地接收来自IRC服务器的PING数据包。我通过在套接字级别添加keepalives修复了这个问题:

代码语言:javascript
复制
    # enable keepalives at the socket (SOL_SOCKET) level
    self.client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
    # after 1 second of TCP inactivity, trigger keepalive pings
    self.client.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)
    # send a keepalive ping every 60 seconds
    self.client.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60)
    # quit after 5 consecutive failures
    self.client.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5)

这一点,再加上为每个PING发回一个PONG,使我的连接保持更长时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10867992

复制
相关文章

相似问题

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