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

上記は正常に動作します。コードの先頭に次の 2 行を追加してデフォルトのソケット タイムアウトを変更しようとすると、プロトコル エラーが発生します。

import socket
socket.setdefaulttimeout(40)

これは私が受け取るエラーです:

ファイル "/usr/local/lib/python2.4/xmlrpclib.py"、1096 行目、呼び出しで return self.__send(self.__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:

デフォルトのソケット タイムアウトが原因で問題が発生するのはなぜですか?

4

1 に答える 1

1

これを修正できるパッチがあります。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)
于 2010-04-06T19:15:42.960 に答える