每当我在Windows或Mac上进入OpenSSL时,我总是制作自己的内存BIO,并将它们链接到基于消息的(异步非阻塞)套接字实现。 (Windows上的WSAAsyncSelect:Mac上的CFSocket)
托管在ibm.com上的Secure programming with the OpenSSL API似乎是实现OpenSSL的最佳参考 - 但它实现了一个非常简单的阻塞连接。
是否有一种标准的方法来设置和使用带有非阻塞套接字的OpenSSL - 例如,如果没有数据,对SSL_read的调用将不会阻塞?
答案 0 :(得分:1)
SSL_read()
(以及其他SSL函数)可以正常工作。如果数据不足,则返回小于零的值;调用返回值的SSL_get_error()
将返回SSL_ERROR_WANT_READ
或SSL_ERROR_WANT_WRITE
,表示SSL正在等待什么。
答案 1 :(得分:0)
将BIO_set_nbio
与BIO_new_socket
或BIO_new_connect/accept
一起使用可能比创建内存BIO的代码少。不确定是否有更多标准。文档更详细地解释了这一点: