Python socket.error errno.ewoldblock

Python socket.error errno.ewoldblock,python,networking,twisted,Python,Networking,Twisted,我在读一些代码,我遇到了这一行 socket.error errno.EWOULDBLOCK 谁能告诉我引发此错误的条件是什么吗?来自Python的套接字模块: 最初,所有插座都处于阻塞状态 模式在非阻塞模式下,如果 recv()调用找不到任何数据,或者 如果无法立即执行send()调用 处置数据,出现错误异常 被提升 它引用的错误异常是errno.ewoldblock 为此,必须使用以下命令将套接字对象设置为非阻塞模式:socketObj.setblocking(0)来自Python的套接字

我在读一些代码,我遇到了这一行

socket.error errno.EWOULDBLOCK

谁能告诉我引发此错误的条件是什么吗?

来自Python的套接字模块:

最初,所有插座都处于阻塞状态 模式在非阻塞模式下,如果 recv()调用找不到任何数据,或者 如果无法立即执行send()调用 处置数据,出现错误异常 被提升

它引用的错误异常是errno.ewoldblock


为此,必须使用以下命令将套接字对象设置为非阻塞模式:
socketObj.setblocking(0)

来自Python的套接字模块:

最初,所有插座都处于阻塞状态 模式在非阻塞模式下,如果 recv()调用找不到任何数据,或者 如果无法立即执行send()调用 处置数据,出现错误异常 被提升

它引用的错误异常是errno.ewoldblock


为此,必须使用以下命令将套接字对象设置为非阻塞模式:
socketObj.setblocking(0)

注意,eWoldBlock是错误号11:

In [80]: import errno
In [83]: errno.EWOULDBLOCK
Out[84]: 11
关联的错误消息为:

In [86]: import os
In [87]: os.strerror(errno.EWOULDBLOCK)
Out[89]: 'Resource temporarily unavailable'
下面是一些显示EWoldblock错误的玩具代码。 它设置了一个服务器和客户端,试图通过套接字连接相互通信。当调用
s.recv(0)
将套接字置于非阻塞模式时,对
s.recv
的后续调用将引发
socket.error
。我认为这是因为连接的两端都试图接收数据:

import socket
import multiprocessing as mp
import sys
import time

def server():
    HOST='localhost'
    PORT=6000
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr=s.accept()
    while True:
        data=conn.recv(1024)
        if data:
            conn.send(data)
    conn.close()   
def client():
    HOST='localhost'
    PORT=6000
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.setblocking(0)     # Comment this out, and the EWOULDBLOCK error goes away
    s.send('Hello, world')
    try:
        data=s.recv(1024)
    except socket.error as err:
        print(err)
        # [Errno 11] Resource temporarily unavailable
        sys.exit()
    finally:
        s.close()
    print('Received {0}'.format(repr(data)))
def run():
    server_process=mp.Process(target=server)
    server_process.daemon=True
    server_process.start()
    time.sleep(0.1)
    client()   
run()
如果注释掉了
s.setblocking(0)
,您应该看到

Received 'Hello, world'

请注意,eWoldBlock是错误号11:

In [80]: import errno
In [83]: errno.EWOULDBLOCK
Out[84]: 11
关联的错误消息为:

In [86]: import os
In [87]: os.strerror(errno.EWOULDBLOCK)
Out[89]: 'Resource temporarily unavailable'
下面是一些显示EWoldblock错误的玩具代码。 它设置了一个服务器和客户端,试图通过套接字连接相互通信。当调用
s.recv(0)
将套接字置于非阻塞模式时,对
s.recv
的后续调用将引发
socket.error
。我认为这是因为连接的两端都试图接收数据:

import socket
import multiprocessing as mp
import sys
import time

def server():
    HOST='localhost'
    PORT=6000
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr=s.accept()
    while True:
        data=conn.recv(1024)
        if data:
            conn.send(data)
    conn.close()   
def client():
    HOST='localhost'
    PORT=6000
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    s.setblocking(0)     # Comment this out, and the EWOULDBLOCK error goes away
    s.send('Hello, world')
    try:
        data=s.recv(1024)
    except socket.error as err:
        print(err)
        # [Errno 11] Resource temporarily unavailable
        sys.exit()
    finally:
        s.close()
    print('Received {0}'.format(repr(data)))
def run():
    server_process=mp.Process(target=server)
    server_process.daemon=True
    server_process.start()
    time.sleep(0.1)
    client()   
run()
如果注释掉了
s.setblocking(0)
,您应该看到

Received 'Hello, world'