OpenSSL等待读取数据可用

时间:2013-01-21 14:03:27

标签: ssl openssl

我正在使用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数据。当然,我可以使用它们,但不会丢失数据。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

  

我使用select()等待套接字,但我无法确定何时有DATA可供读取。

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