在非阻塞套接字上接收数据时如何解决阻塞错误

时间:2019-02-17 12:05:54

标签: python-3.x sockets tcp

我正在尝试创建一个可以处理多个连接的简单回显服务器,我正在使用select并需要使用非阻塞套接字,但是我收到一条错误消息,提示“ BlockingIOError:[Errno 35]资源暂时不可用”我在哪里接收数据。

这是服务器和客户端代码

inputs = [server]

while True:
    inready, outready, excready = select.select(inputs, [], [])

    for s in inready:
        if s == server:
            client, address = server.accept()
            client.setblocking(0)
            print(address)
            inready.append(client)

        else:
            data = s.recv(1024);
            if data:
                s.send(data)
            else:
                inputs.remove(s)
                s.close()

1 个答案:

答案 0 :(得分:0)

这个小错误也花了我一段时间:

            inready.append(client)

当然是正确的:

            inputs.append(client)

由于inready被意外修改,因此else块本不应该被执行。