我在Linux上使用python 2.4.1,在我工作的公司内部编写python包,用于在2台主机之间建立连接以进行测试。
建立连接后,当使用正确的参数(我检查)使用错误代码111调用socket.connect
时,定义为客户端的一方失败。在网上搜索此错误意味着,我知道这意味着该连接被主动拒绝。
但是用于建立连接的包中的代码应该处理它,只有它知道10061作为同一错误的错误代码:连接被拒绝。
对于相同的逻辑错误,是否存在相同的错误代码?可能是111是Linux操作系统的系统错误,因为10061是python甚至是另一个操作系统?即便如此,错误代码的整个概念不是用相同的代码来统一逻辑错误吗?
我应该简单地将111错误代码添加到处理条件吗?
答案 0 :(得分:6)
似乎Python正在暴露操作系统的错误代码 - 代码的解释依赖于操作系统。
在许多Linux系统和Cygwin上, 111是ECONNREFUSED
。
146是ECONNREFUSED
。
10061在winerror.h中为WSAECONNREFUSED
- 它是Windows Socket API的ECONNREFUSED
版本。
毫无疑问,在其他系统上,它又有所不同。
处理此问题的正确方法是使用基于操作系统ECONNREFUSED
定义的符号比较;例如,这就是你在C中的表现方式。换句话说,在一个特定于平台的库中(在任何情况下都需要链接到OS的套接字基元),并且将错误代码与ECONNREFUSED常量进行比较,请为该平台提供一个ECONNREFUSED值,该值为ECONNREFUSED。而不是魔术数字。
我不知道Python的操作系统错误代码的标准方法是什么。我怀疑它没有经过深思熟虑。