socket.setdefaulttimeout与M2Crypto连接交互

时间:2010-03-11 19:20:10

标签: m2crypto

我正在使用python和M2Crypto与服务器建立安全的SSL连接。请参阅下面的代码。

from M2Crypto import SSL, m2,x509
from M2Crypto.m2xmlrpclib import Server, SSL_Tranport
ctx = SSL.Context()
m2.ssl_ctx_use_pkey_privkey(ctx.ctx,myKey.pkey)
m2.ssl_ctx_use_x509(ctx.ctx,myCert.x509)
server = Server(serverUrl, SSL_Transport(ctx))
server.ping()

以上工作正常。如果我尝试通过在代码的开头添加以下两行来更改默认套接字超时,则会出现协议错误。

import socket
socket.setdefaulttimeout(40)

这是我收到的错误:

文件“/usr/local/lib/python2.4/xmlrpclib.py”,第1096行,致电     return self .__ send(self .__ name,args)   __request中的文件“/usr/local/lib/python2.4/xmlrpclib.py”,第1383行     冗长=自.__冗长   请求文件“/usr/local/lib/python2.4/site-packages/M2Crypto/m2xmlrpclib.py”,第68行     头 xmlrpclib.ProtocolError:

为什么默认套接字超时会导致问题?

1 个答案:

答案 0 :(得分:1)

有一个补丁可以解决这个问题。它仅适用于Linux。见Bug 2341 - > https://bugzilla.osafoundation.org/show_bug.cgi?id=2341

我还没试过补丁。我将使用不同的工作。我将套接字超时设置为无,然后运行我的M2Crypto代码,然后将套接字超时设置回我剩余代码所需的值。

origTimeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(None)
# run M2Crypto code
socket.setdefaulttimeout(origTimeout)