Как исправить ошибку блокировки при получении данных на неблокирующем сокете - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь создать простой эхо-сервер, который может обрабатывать несколько соединений, я использую 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 голосов
/ 19 февраля 2019

Эта небольшая ошибка заняла у меня также некоторое время, чтобы найти:

            inready.append(client)

Правильно, конечно:

            inputs.append(client)

Поскольку inready был случайно изменен, elseблок был выполнен, когда его не должно было быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...