我正在使用 OpenSSL 连接到 HTTPS 服务器、发送数据并读取响应。我需要保持连接打开并在数据可用时立即读取数据。
我正在使用 BIO,并使用BIO_read
.
问题是我等待套接字使用select()
,但我不能确定何时有数据可供读取。
我试过(在我确定select()
说有数据可供读取之后):
- BIO_eof
- BIO_待定
- BIO_should_read
- SSL_待定
- SSL_peek
但这似乎不起作用。BIO_eof
返回 false 并且我使用其他函数检查数据,但例如BIO_pending
即使有可用数据也返回 false。
如果我根据这些函数返回 true,我就会SYSCALL_ERROR
发现有问题。
如何检查套接字上是否有可用的读取数据?我必须确保在SSL/BIO_read
调用时有数据可以在不使用这些函数的情况下读取。当然,我可以使用它们,但不会丢失数据。
有什么建议么?