繁体   English   中英

pyOpenSSL 和 WantReadError

[英]pyOpenSSL and the WantReadError

我有一个套接字服务器,我试图在 python 2.5 上转移到 SSL,但是我遇到了 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM