Установить таймаут для getaddrinfo () в Python - PullRequest
1 голос
/ 28 сентября 2010

Можно ли установить таймаут для вызова getaddrinfo () в CPython 2.7?

socket.setdefaulttimeout () работает , а не .Я действительно не хочу решение, которое оборачивает функцию, используя потоки или сигналы.Лучше всего использовать решение, использующее только стандартную библиотеку, но приемлемо использование стороннего пакета.

Например, я хочу сделать это:

socket.getaddrinfo("""!@#$%^&*()+=-[]\\\';,./{}|\":<>?~_""", None)

И заставить его поднятьошибка socket.er в 1 секунду.(Обратите внимание, что когда я запускаю это в OS X, оно все равно быстро истекает, но при запуске в Debian происходит около 60 секунд).

1 Ответ

4 голосов
/ 28 сентября 2010

Насколько я понимаю, getaddrinfo является оболочкой для библиотеки, предоставляемой ОС:

В Unix:

int getaddrinfo(const char *nodename, const char *servname,
                const struct addrinfo *hints, struct addrinfo **res);

В Windows:

int WSAAPI getaddrinfo(
  __in_opt  PCSTR pNodeName,
  __in_opt  PCSTR pServiceName,
  __in_opt  const ADDRINFOA *pHints,
  __out     PADDRINFOA *ppResult
);

Ни один из них не использует значение тайм-аута и, следовательно, Python не может предоставить вас напрямую. Вы должны либо кодировать это, используя потоки, либо использовать стороннюю библиотеку.

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