OpenSSL等待读取数据可用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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数据。当然,我可以使用它们,但不会丢失数据。
有什么建议?
答案
我在socket上使用select()等待,但是我无法确定何时有DATA可供读取。
是的你可以。如果select()
返回> 0并且有readfds
且没有writefds
,则有可读的套接字。但是,读取的数据可能是SSL数据,而不是应用程序数据。你不能提前说出来。你必须做阅读才能找到答案。仍然存在这样的可能性:在这样做之后,您可能仍然没有数据,或者需要写入等,如API所建议的那样。你只需要应付这一点。
以上是关于OpenSSL等待读取数据可用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 COMMTIMEOUTS 等待字节可用但读取多个字节?