2010-03-11 77 views
0

我正在使用python和M2Crypto与服务器进行安全的SSL连接。见下面的代码。socket.setdefaulttimeout与M2Crypto连接进行交互

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,在通话 回归自我.__发(个体经营.__ name,args) 文件“/usr/local/lib/python2.4/xmlrpclib.py”,第1383行,在__request中 verbose = self .__ verbose 文件“/usr/local/lib/python2.4/site -packages/M2Crypto/m2xmlrpclib.py“,第68行,请求 标题 xmlrpclib.ProtocolError:

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

回答

1

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

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

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

你能告诉我们什么问题是,什么补丁(如https://gitlab.com/m2crypto/m2crypto/issues/new一个新的问题,请),所以我们可以认为它对于目前的m2crypto,请问?谢谢。 – mcepl 2016-08-26 19:27:29