首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyOpenSSL和WantReadError

pyOpenSSL和WantReadError
EN

Stack Overflow用户
提问于 2010-03-12 03:19:26
回答 1查看 2.9K关注 0票数 4

我有一个socket服务器,我正试图将其迁移到Python2.5上的SSL,但我在使用pyOpenSSL时遇到了问题。我找不到任何关于使用它的好的教程,所以我主要是靠猜测来操作。

下面是我的服务器如何设置套接字:

代码语言:javascript
复制
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)

下面是它接受客户端的方式:

代码语言:javascript
复制
sock.setblocking(0)
while True:
  if len(select([sock], [], [], 0.25)[0]):
    client_sock, client_addr = sock.accept()
    client = ClientGen(client_sock)

下面是它如何从连接的套接字发送/接收:

代码语言:javascript
复制
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)

它是紧凑的,但您得到了大致的概念。问题是,一旦发送/接收循环开始,它就会在发送或接收任何东西之前立即终止(我无论如何都能看到):

代码语言:javascript
复制
Traceback (most recent call last):
  File "ClientGen.py", line 50, in networkLoop
    n_bytes = sock.send(self.message
WantReadError

手册对“WantReadError”的描述非常含糊,说它可以来自任何地方。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-27 21:53:06

有时,为了向应用程序发送SSL连接的字节,您需要能够首先从连接中读取更多字节。WantReadError是表示这种情况的方式。您唯一做错的事情是您没有处理WantReadError,然后在您再次尝试调用send之前等待select指示套接字是可读的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2427947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档