SocketServer.TCPSocket работает на стандартном Python, но не на Python, скомпилированном для MSVCRT100 с более новым OpenSSL - PullRequest
1 голос
/ 07 июля 2011

Среда:

  • Python 2.7.1 (построен на основе MSVCRT100)
  • Windows 7

Код:

import ssl
import socket
socket = socket.socket()
socket = ssl.wrap_socket(socket, keyfile='key', certfile='cert', server_side=True)

Хотя это нормально работает на Mac OS X, это не работает на Windows с:

socket.error: [Errno 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

Интересно, что это работает, если используется стандартный Python, который использует OpenSSL 0.9.8l - Насколько яМожно сказать, я скомпилировал Python и OpenSSL 0.9.8r, используя как можно больше значений по умолчанию.

Как мне заставить этот код работать - в качестве альтернативы, как я должен расследовать преступника?

Ответы [ 2 ]

2 голосов
/ 05 июня 2015

Следующая ошибка говорит о том, что «сокет не подключен»

socket.error: [Errno 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

ssl.wrap_socket использует ленивую конструкцию контекста:

Длясокеты на стороне сервера, если сокет не имеет удаленного однорангового узла, предполагается, что это сокет прослушивания, и на стороне клиента автоматически выполняется перенос SSL на стороне клиента, принятый методом accept ().

Почему-то это не работает для Python 2.7 с MSVCRT100, просто вызовите ssl.wrap_socket () после accept ()

1 голос
/ 24 мая 2012

При компиляции Python 2.7.1 с msvcrt100 возникают некоторые серьезные проблемы.Среди них тот факт, что Microsoft изменила некоторый код ошибки между msvcrt90 и msvcrt100.

Если вы хотите, чтобы он работал, вам придется довольно много исправлять Python, следуя указаниям на этих 2 страницах:

http://wiki.python.org/moin/VS2010

http://bugs.python.org/issue13210

В противном случае вам следует перейти на Python 3.3, который будет включать все эти исправления для VS2010.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...