Как установить тайм-аут на сокете Python recv метод?

Я должен установить тайм-аут на сокете Python recv метод. Как сделать это?

99
задан Thoreller 27 April 2010 в 05:51
поделиться

2 ответа

Типичный подход заключается в использовании select () для ожидания, пока данные станут доступны или пока не истечет время ожидания. Вызывайте recv () только тогда, когда данные действительно доступны. На всякий случай мы также установили сокет в неблокирующий режим, чтобы гарантировать, что recv () никогда не будет блокироваться бесконечно. select () также можно использовать для ожидания более чем на одном сокете одновременно.

import select

mysocket.setblocking(0)

ready = select.select([mysocket], [], [], timeout_in_seconds)
if ready[0]:
    data = mysocket.recv(4096)

Если у вас много дескрипторов открытых файлов, poll () является более эффективной альтернативой select () .

Другой вариант - установить тайм-аут для всех операций с сокетом с помощью socket.settimeout () , но я вижу, что вы явно отклонили это решение в другом ответе.

116
ответ дан 24 November 2019 в 05:01
поделиться
50
ответ дан 24 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

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