socket.recv()什么时候引发异常?

时间:2014-12-19 15:25:29

标签: python sockets tcp blocking recv

我使用阻塞套接字,我对recv()非常困惑,因为我没有找到任何关于它的正确文档。官方似乎只限于我。让我感到困惑的另一件事是,互联网上(以及本网站上的人)说它不会因为阻塞套接字而引发任何异常,但它只是在等待。如果我残酷地关闭服务器,它会抛出一个Errno 10054(socket.error)。

1 个答案:

答案 0 :(得分:1)

简而言之,只要基础套接字操作失败,recv就会抛出异常。问题在于它取决于您所使用的操作系统。在这里我可以猜到你在Windows上,因为10054是Windows error code用于连接重置。幸运的是,套接字操作失败的时间和原因在操作系统之间大致一致(请查看Windows documentation了解详细信息),并且python有一个可移植的解决方案来识别错误:

import errno
...
if err == errno.ECONNRESET :
    print "connection reset"