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

我用python编写了一个简单的多线程游戏服务器,该服务器为每个客户端连接创建了一个新线程。我发现每时每刻,服务器都会由于管道损坏/ SIGPIPE错误而崩溃。我很确定程序尝试将响应发送回不再存在的客户端时会发生这种情况。


有什么好办法解决这个问题?我的首选解决方案是简单地关闭与客户端的服务器端连接并继续,而不是退出整个程序。



尚方宝剑之说
浏览 825回答 3
3回答

慕侠2389804

阅读try:语句。try:    # do somethingexcept socket.error, e:    # A socket errorexcept IOError, e:    if e.errno == errno.EPIPE:        # EPIPE error    else:        # Other error

POPMUISE

SIGPIPE(尽管我认为也许是您的意思EPIPE?)在您关闭套接字然后向其发送数据时,套接字上会发生这种情况。一种简单的解决方案是在尝试发送套接字数据之前不关闭套接字。这也可能发生在管道上,但这听起来好像不是您正在经历的,因为它是网络服务器。您还可以仅在每个线程的某些顶级处理程序中应用捕获异常的创可贴。当然,如果您使用Twisted而不是为每个客户端连接生成新线程,则可能不会出现此问题。如果多个线程处理同一个I / O通道,则很难正确地完成close和write操作的顺序(取决于您的应用程序)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python