相同的错误代码

时间:2009-06-07 08:08:26

标签: python error-handling sockets

我在Linux上使用python 2.4.1,在我工作的公司内部编写python包,用于在2台主机之间建立连接以进行测试。

建立连接后,当使用正确的参数(我检查)使用错误代码111调用socket.connect时,定义为客户端的一方失败。在网上搜索此错误意味着,我知道这意味着该连接被主动拒绝。

但是用于建立连接的包中的代码应该处理它,只有它知道10061作为同一错误的错误代码:连接被拒绝。

对于相同的逻辑错误,是否存在相同的错误代码?可能是111是Linux操作系统的系统错误,因为10061是python甚至是另一个操作系统?即便如此,错误代码的整个概念不是用相同的代码来统一逻辑错误吗?

我应该简单地将111错误代码添加到处理条件吗?

1 个答案:

答案 0 :(得分:6)

似乎Python正在暴露操作系统的错误代码 - 代码的解释依赖于操作系统。

在许多Linux系统和Cygwin上,

111是ECONNREFUSED

Solaris上的

146是ECONNREFUSED

10061在winerror.h中为WSAECONNREFUSED - 它是Windows Socket API的ECONNREFUSED版本。

毫无疑问,在其他系统上,它又有所不同。

处理此问题的正确方法是使用基于操作系统ECONNREFUSED定义的符号比较;例如,这就是你在C中的表现方式。换句话说,在一个特定于平台的库中(在任何情况下都需要链接到OS的套接字基元),并且将错误代码与ECONNREFUSED常量进行比较,请为该平台提供一个ECONNREFUSED值,该值为ECONNREFUSED。而不是魔术数字。

我不知道Python的操作系统错误代码的标准方法是什么。我怀疑它没有经过深思熟虑。