pyOpenSSL和WantReadError
题
我有我试图移动到SSL上的蟒蛇2.5套接字服务器,但我已经运行到与pyOpenSSL一个障碍。我找不到使用它的任何好的教程,所以我就猜测主要工作。
下面是我的服务器如何设置插座:
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_privatekey_file ("mykey.pem")
ctx.use_certificate_file("mycert.pem")
sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ('', int(8081))
sock.bind(addr)
sock.listen(5)
下面是如何接受客户端:
sock.setblocking(0)
while True:
if len(select([sock], [], [], 0.25)[0]):
client_sock, client_addr = sock.accept()
client = ClientGen(client_sock)
和这里是如何发送从所连接的插座/接收:
while True:
(r, w, e) = select.select([sock], [sock], [], 0.25)
if len(r):
bytes = sock.recv(1024)
if len(w):
n_bytes = sock.send(self.message)
这是紧凑,但你的总体思路。问题是,一旦发送/接收循环开始,死了马上,之前已发送或接收任何东西(我可以看到反正):
Traceback (most recent call last):
File "ClientGen.py", line 50, in networkLoop
n_bytes = sock.send(self.message
WantReadError
在“WantReadError”的手册的描述很模糊,说这可以来自任何地方。我在做什么错了?
解决方案
有时为了送SSL连接的应用程序字节,你需要能够首先从连接读取多个字节。 WantReadError
是这种情况下,如何表示。你做错了,唯一的事情是,你不处理WantReadError
然后等到select
表示该插座的读取的您重新尝试呼叫send
之前。
不隶属于 StackOverflow