相同的错误代码

Avi*_*ion 2 python sockets error-handling

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

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

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

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

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

Bar*_*lly 6

看起来Python正在暴露操作系统的错误代码 - 代码的解释依赖于操作系统.

111 ECONNREFUSED在许多Linux系统上,在Cygwin上.

146 ECONNREFUSED在Solaris上.

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

毫无疑问,在其他系统上,它又是不同的.

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

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

  • 看来python有一种方法可以通过使用errno包来处理OS错误代码.它包含每个标准错误的符号.包括问题中的一个.它至少可以像2.4.1一样提供. (2认同)