Тайм-аут соединения с сокетом Python - PullRequest
48 голосов
/ 08 августа 2010

У меня есть сокет, для которого я хочу установить тайм-аут при подключении, чтобы я мог отменить всю операцию, если он не может подключиться, но при этом он также хочет использовать make-файл для сокета, который не требует времени ожидания.

Есть ли простой способ сделать это или это будет трудно сделать?

Позволяет ли python сбрасывать время ожидания после подключения, чтобы я мог использовать makefile и все ещеесть тайм-аут для подключения сокета

Ответы [ 3 ]

85 голосов
/ 08 августа 2010

Вам просто нужно использовать метод сокета settimeout() перед попыткой connect(), обратите внимание, что после подключения необходимо settimeout(None), чтобы перевести сокет в режим блокировки, это необходимо Makefile Вот код, который я использую:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect(address)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
15 голосов
/ 15 августа 2013

Если вы используете Python2.6 или новее, удобно использовать socket.create_connection

sock = socket.create_connection(address, timeout=10)
sock.settimeout(None)
fileobj = sock.makefile('rb', 0)
0 голосов
/ 29 января 2019

Для установки времени ожидания Socket вам необходимо выполнить следующие шаги:

import socket
socks = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.settimeout(10.0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...