socket.setdefaulttimeout, взаимодействующий с соединением M2Crypto - PullRequest
0 голосов
/ 11 марта 2010

Я делаю безопасное SSL-соединение с сервером, используя python и 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, в вызов вернуть себя .__ отправить (self .__ имя, аргументы) Файл "/usr/local/lib/python2.4/xmlrpclib.py", строка 1383, в __request многословен = само .__ многословным Файл "/usr/local/lib/python2.4/site-packages/M2Crypto/m2xmlrpclib.py", строка 68, в запросе заголовки xmlrpclib.ProtocolError:

Почему время ожидания сокета по умолчанию вызывает проблемы?

1 Ответ

1 голос
/ 06 апреля 2010

Существует патч, который может это исправить. Это только для 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)
...