Что Python socket.recv () возвращает для неблокирующих сокетов, если данные не получены до истечения времени ожидания?

В основном япрочитал в нескольких местах, чтоsocket.recv() вернет все, что может прочитать, или пустую строку, сигнализирующую, что другая сторона закрылась (официальные документы недаже не упомянуть, что он возвращает, когда соединение закрыто ... здорово!). Это все хорошо и прекрасно для блокировки сокетов, так как мы знаем, чтоrecv() возвращается только тогда, когда на самом деле есть что получить, поэтому, когда он возвращает пустую строку, онДОЛЖЕН значит, другая сторона закрыла соединение, верно?

Хорошо, хорошо, но что происходит, когда мой сокет не блокируется? Я искал немного (может быть, недостаточно, кто знает?) И могу 't выяснить, как определить, когда другая сторона закрыла соединение, используя неблокирующую розетку. Кажется, нет никакого метода или атрибута, который говорит нам об этом, и сравнивая возвращаемое значениеrecv() пустой строке кажется абсолютно бесполезным ... это только у меня такая проблема?

В качестве простого примера, давайтескажи мое гнездоТайм-аут s установлен на 1.2342342 (любое неотрицательное число, которое вам нравится здесь), и я звонюsocket.recv(1024), но другая сторона нев течение этого 1.2342342 второго периода.recv() вызов вернет пустую строку, и я не имею ни малейшего понятия, является ли соединение все еще стоит или нет ...

Ответы на вопрос(4)

Ваш ответ на вопрос