socket.setdefaulttimeout 与 M2Crypto 连接交互

发布于 2024-08-24 09:36:59 字数 832 浏览 7 评论 0原文

我正在使用 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)

这是我收到的错误:

File "/usr/local/lib/python2.4/xmlrpclib.py", line 1096, in call 返回 self.__send(self.__name, args) 文件“/usr/local/lib/python2.4/xmlrpclib.py”,第 1383 行,在 __request 中 详细=自我.__详细 文件“/usr/local/lib/python2.4/site-packages/M2Crypto/m2xmlrpclib.py”,第 68 行,根据请求 标头 xmlrpclib.ProtocolError:

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

I'm making a secure SSL connection to a server using python and M2Crypto. See code below.

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()

The above works fine. If I try to change the default socket timeout by adding the following two lines at the beginning of the code, I get a protocol error.

import socket
socket.setdefaulttimeout(40)

This is the error I receive:

File "/usr/local/lib/python2.4/xmlrpclib.py", line 1096, in call
return self.__send(self.__name, args)
File "/usr/local/lib/python2.4/xmlrpclib.py", line 1383, in __request
verbose=self.__verbose
File "/usr/local/lib/python2.4/site-packages/M2Crypto/m2xmlrpclib.py", line 68, in request
headers
xmlrpclib.ProtocolError:

Why is the default socket timeout causing problems?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧故 2024-08-31 09:36:59

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

我还没有尝试过该补丁。我将使用不同的解决方法。我将套接字超时设置为 None,然后运行我的 M2Crypto 代码,然后将套接字超时设置回我其余代码所需的值。

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

There is a patch that can fix this. It is for Linux only. See Bug 2341 --> https://bugzilla.osafoundation.org/show_bug.cgi?id=2341

I have not tried the patch. I will use a different work around. I set the socket timeout to None then run my M2Crypto code then set the socket timeout back to the value I need for the rest of my code.

origTimeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(None)
# run M2Crypto code
socket.setdefaulttimeout(origTimeout)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文