我用python编写了一个简单的多线程游戏服务器,该服务器为每个客户端连接创建了一个新线程。我发现每时每刻,服务器都会由于管道损坏/ SIGPIPE错误而崩溃。我很确定程序尝试将响应发送回不再存在的客户端时会发生这种情况。有什么好办法解决这个问题?我的首选解决方案是简单地关闭与客户端的服务器端连接并继续,而不是退出整个程序。
3 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
阅读try:语句。
try:
# do something
except socket.error, e:
# A socket error
except IOError, e:
if e.errno == errno.EPIPE:
# EPIPE error
else:
# Other error
POPMUISE
TA贡献1765条经验 获得超5个赞
SIGPIPE(尽管我认为也许是您的意思EPIPE?)在您关闭套接字然后向其发送数据时,套接字上会发生这种情况。一种简单的解决方案是在尝试发送套接字数据之前不关闭套接字。这也可能发生在管道上,但这听起来好像不是您正在经历的,因为它是网络服务器。
您还可以仅在每个线程的某些顶级处理程序中应用捕获异常的创可贴。
当然,如果您使用Twisted而不是为每个客户端连接生成新线程,则可能不会出现此问题。如果多个线程处理同一个I / O通道,则很难正确地完成close和write操作的顺序(取决于您的应用程序)。
添加回答
举报
0/150
提交
取消