为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中处理管道破损(SIGPIPE)?

如何在python中处理管道破损(SIGPIPE)?

尚方宝剑之说 2019-12-25 10:44:11
我用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


查看完整回答
反对 回复 2019-12-25
?
POPMUISE

TA贡献1765条经验 获得超5个赞

SIGPIPE(尽管我认为也许是您的意思EPIPE?)在您关闭套接字然后向其发送数据时,套接字上会发生这种情况。一种简单的解决方案是在尝试发送套接字数据之前不关闭套接字。这也可能发生在管道上,但这听起来好像不是您正在经历的,因为它是网络服务器。


您还可以仅在每个线程的某些顶级处理程序中应用捕获异常的创可贴。


当然,如果您使用Twisted而不是为每个客户端连接生成新线程,则可能不会出现此问题。如果多个线程处理同一个I / O通道,则很难正确地完成close和write操作的顺序(取决于您的应用程序)。


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 821 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信