接受套接字时获取 BlockingIOError (WinError 10035)

Getting BlockingIOError (WinError 10035) when accepting a socket

我有机会再次与 Python 合作,但这次我决定带着 Python 3.5 去我的旅程。

我不得不使用 Tornado 将工作的非阻塞套接字服务器从 Python 2.7 移植到 3.5。使用相同的源代码,但这次它不能按需工作。

每当我使用 socket.accept() 接受套接字连接时,我总是收到 [WinError 10035] A non-blocking socket operation could not be completed immediately on send,但我仍然不明白为什么。

尝试使用示例 code that I've found a few years ago on GitHub Gist,但仍然出现错误。套接字库有任何变化还是只是一个错误?

这个错误是无害的,是意料之中的。问题是你链接到的要点不知道 windows-specific 错误代码(在第 24 行它检查 EWOULDBLOCK 和 EAGAIN,但它也应该使用 WSAEWOULDBLOCK)。

自从编写该要点后,Tornado 获得了一些新的实用程序来简化此操作。如果您正在使用 IOStreams,您可以使用 tornado.tcpserver.TCPServer 来接受您的连接,或者如果您想继续使用普通套接字,您可以使用较低级别的 tornado.netutil.add_accept_handler