OpenSSL等待读取数据可用

问题描述 投票:0回答:1

我正在使用OpenSSL连接到HTTPS服务器,发送数据和读取响应。我需要保持连接打开并在数据可用时立即读取数据。

我正在使用BIO,并使用BIO_read读取数据。

问题是我在使用select()等插座上等待,但我无法确定何时有DATA可供读取。

我试过(在我确定select()说有数据可供阅读之后):

  • BIO_eof
  • BIO_pending
  • BIO_should_read
  • SSL_pending
  • SSL_peek

但它似乎没有用。 BIO_eof返回false并检查其他函数的数据,但是例如BIO_pending即使有可用数据也返回false。

如果我根据这些函数返回true,我会得到SYSCALL_ERROR,所以出了问题。

如何检查套接字上是否有读取数据?我必须确保在调用SSL/BIO_read时,可以在不使用这些函数的情况下读取IS数据。当然,我可以使用它们,但不会丢失数据。

有什么建议?

ssl openssl
1个回答
0
投票

我在socket上使用select()等待,但是我无法确定何时有DATA可供读取。

是的你可以。如果select()返回> 0并且有readfds且没有writefds,则有可读的套接字。但是,读取的数据可能是SSL数据,而不是应用程序数据。你不能提前说出来。你必须做阅读才能找到答案。仍然存在这样的可能性:在这样做之后,您可能仍然没有数据,或者需要写入等,如API所建议的那样。你只需要应付这一点。

© www.soinside.com 2019 - 2024. All rights reserved.