Идентичные коды ошибок - PullRequest
2 голосов
/ 07 июня 2009

Я использую python 2.4.1 для Linux и пакет python, написанный внутри компании, в которой я работаю, для установления соединения между двумя хостами в целях тестирования.

После установления соединения сторона, определенная как сторона клиента, потерпела неудачу при вызове socket.connect с правильными параметрами (я проверил) с кодом ошибки 111. После поиска в Интернете этой ошибки означает, что я узнал, что это означает, что в соединении было активно отказано.

Но код в пакете для установления соединения должен иметь с ним дело, только он знает 10061 как код ошибки для той же самой ошибки: соединение отклонено.

Может быть, идентичные коды ошибок совпадают для одних и тех же логических ошибок? Может ли быть так, что 111 - системная ошибка ОС Linux, а 10061 - это Python или даже другая ОС? Тем не менее, разве не вся концепция кодов ошибок объединяет логические ошибки с одинаковыми кодами?

Стоит ли просто добавить код ошибки 111 в условие обработки?

1 Ответ

6 голосов
/ 07 июня 2009

Похоже, что Python выставляет код ошибки из ОС - интерпретация кода зависит от ОС.

111 - это ECONNREFUSED во многих системах Linux и в Cygwin.

146 - это ECONNREFUSED в Solaris.

10061 - это WSAECONNREFUSED в winerror.h - это версия ECONNREFUSED.

для Windows Socket API.

Нет сомнений, что в других системах все по-другому.

Правильный способ справиться с этим - использовать символьные сравнения, основанные на определении ОС ECONNREFUSED; Вот как вы делаете это, например, в Си. Другими словами, имейте константу с именем ECONNREFUSED, которая имеет значение ECONNREFUSED для этой платформы, в библиотеке для конкретной платформы (которая будет необходима для связи с примитивами сокетов ОС в любом случае), и сравните коды ошибок с константой ECONNREFUSED , а не магические числа.

Я не знаю, каков стандартный подход Python к кодам ошибок ОС. Я подозреваю, что это не очень хорошо продумано.

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