gpt4 book ai didi

python - pyOpenSSL 和 WantReadError

转载 作者:行者123 更新时间:2023-11-28 22:07:14 25 4
gpt4 key购买 nike

我有一个套接字服务器,我正试图将其转移到 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

关于python - pyOpenSSL 和 WantReadError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com