我在Linux上使用python 2.4.1,以及我工作的公司内部编写的python包,用于在两台主机之间建立连接以进行测试。
建立连接后,定义为客户端的一侧在调用时失败socket.connect
使用正确的参数(我检查过),错误代码为111。在网上搜索此错误的含义后,我了解到这意味着连接被主动拒绝。
但是包中用于建立连接的代码应该处理它,只有它知道 10061 作为同一错误的错误代码:连接被拒绝。
难道同样的逻辑错误有相同的错误码吗?难道111是Linux操作系统的系统错误,而10061是python的甚至是其他操作系统的错误?即便如此,错误代码的整个概念不就是将逻辑错误统一为相同的代码吗?
我应该简单地将 111 错误代码添加到处理条件中吗?
看来 Python 正在从操作系统公开错误代码 - 代码的解释取决于操作系统。
111 is ECONNREFUSED
在许多 Linux 系统和 Cygwin 上。
146 is ECONNREFUSED
在 Solaris 上。
10061 是WSAECONNREFUSED
在 winerror.h 中 - 它是 Windows Socket API 的版本ECONNREFUSED
.
毫无疑问,在其他系统上,情况又有所不同。
处理这个问题的正确方法是根据操作系统的定义使用符号比较ECONNREFUSED
;例如,这就是您在 C 中执行此操作的方式。换句话说,在特定于平台的库(在任何情况下都需要链接到操作系统的套接字原语)中有一个名为 ECONNREFUSED 的常量,该常量具有该平台的 ECONNREFUSED 值,并将错误代码与 ECONNREFUSED 常量进行比较,而不是幻数。
我不知道Python处理操作系统错误代码的标准方法是什么。我怀疑这不是经过深思熟虑的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)