Как освободить сокет в Python?

Добавьте перевод строки (" \n") к выводу:

<textarea>Hello


Bybye</textarea>

будет иметь новую строку в нем.

10
задан luc 1 July 2010 в 10:10
поделиться

3 ответа

Если под «промыть» вы имеете в виду выброс удалив все ожидающие входящие данные, вы можете либо использовать select (), как вы, либо установить для сокета неблокирующий режим и читать в цикле, пока у вас не закончатся данные.

Также обратите внимание, что (из справочной страницы Linux):

Под Linux, select () может сообщить дескриптор файла сокета как "готовый" для чтения ", но все же последующие блоки чтения. Это может, например, произойти, когда данные были получены, но после проверка имеет неправильную контрольную сумму и не принимается. Могут быть и другие обстоятельства, при которых дескриптор файла ложно сообщается как готов. Таким образом, может быть безопаснее использовать O_NONBLOCK для сокетов, которые должны не блокируется.

Уведомление о ложной готовности для системного вызова Select

И, как было отмечено другими, «сброс» обычно относится к выходным данным.

6
ответ дан 4 December 2019 в 01:57
поделиться

Использование select.select является хорошей практикой, как указано в HOWTO по программированию сокетов . Вам нужно будет настроить сокет как неблокирующий, используя sock.setblocking (0) .

Просто комментарий по номенклатуре: flush обычно ассоциируется с вывод операций.

3
ответ дан 4 December 2019 в 01:57
поделиться

Не уверен, что это сработает, но вы можете прикрепить файловый объект к файловому дескриптору сокета и вызвать метод flush () для этого файлового объекта:

import os

file_obj = os.fdopen(your_socket.fileno())
file_obj.flush()

Это не будет работать в Windows, потому что дескриптор, возвращаемый fileno () , не может быть передан в os.fdopen () в Windows

-1
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: