Похоже, что Python выставляет код ошибки из ОС - интерпретация кода зависит от ОС.
111 - это ECONNREFUSED
во многих системах Linux и в Cygwin.
146 - это ECONNREFUSED
в Solaris.
10061 - это WSAECONNREFUSED
в winerror.h - это версия ECONNREFUSED
.
для Windows Socket API.
Нет сомнений, что в других системах все по-другому.
Правильный способ справиться с этим - использовать символьные сравнения, основанные на определении ОС ECONNREFUSED
; Вот как вы делаете это, например, в Си. Другими словами, имейте константу с именем ECONNREFUSED, которая имеет значение ECONNREFUSED для этой платформы, в библиотеке для конкретной платформы (которая будет необходима для связи с примитивами сокетов ОС в любом случае), и сравните коды ошибок с константой ECONNREFUSED , а не магические числа.
Я не знаю, каков стандартный подход Python к кодам ошибок ОС. Я подозреваю, что это не очень хорошо продумано.