我正在使用OpenSSL连接到HTTPS服务器,发送数据和读取响应。我需要保持连接打开并在数据可用时立即读取数据。
我正在使用BIO,并使用BIO_read
读取数据。
问题是我使用select()
等待套接字,但我无法确定何时有DATA可供读取。
我尝试过(确保select()
表示有可供阅读的数据后):
但它似乎不起作用。 BIO_eof
返回false并检查其他函数的数据,但例如BIO_pending
即使有可用数据也会返回false。
如果我根据这些功能返回true,我会SYSCALL_ERROR
因此出错了。
如何检查套接字上是否有读取数据?我必须确保在调用SSL/BIO_read
时,可以在不使用这些函数的情况下读取IS数据。当然,我可以使用它们,但不会丢失数据。
有什么建议吗?
答案 0 :(得分:0)
我使用select()等待套接字,但我无法确定何时有DATA可供读取。
是的,你可以。如果select()
返回> 0,有readfds
和writefds
,有可读的套接字。但是,读取的数据可能是SSL数据,而不是应用程序数据。你不能提前说出来。你必须做阅读才能找到答案。仍然存在这样的可能性:在这样做之后,您可能仍然没有数据,或者需要写入等,如API所建议的那样。你只需要应付这个。