【问题标题】:How to fix blocking error when receiving data on non-blocking socket在非阻塞套接字上接收数据时如何修复阻塞错误
【发布时间】:2019-07-10 23:57:19
【问题描述】:

我正在尝试创建一个可以处理多个连接的简单回显服务器,我正在使用 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()

【问题讨论】:

    标签: python-3.x sockets tcp


    【解决方案1】:

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

                inready.append(client)
    

    当然是正确的:

                inputs.append(client)
    

    由于inready 被意外修改,else 块在不应该执行的情况下被执行。

    【讨论】:

    • 这是救生员!我有同样的问题哈哈!我砸了那个大拇指按钮!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2013-10-15
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多