使用没有线程的OpenSSL

时间:2010-11-05 08:39:24

标签: windows macos sockets openssl

每当我在Windows或Mac上进入OpenSSL时,我总是制作自己的内存BIO,并将它们链接到基于消息的(异步非阻塞)套接字实现。 (Windows上的WSAAsyncSelect:Mac上的CFSocket)

托管在ibm.com上的

Secure programming with the OpenSSL API似乎是实现OpenSSL的最佳参考 - 但它实现了一个非常简单的阻塞连接。

是否有一种标准的方法来设置和使用带有非阻塞套接字的OpenSSL - 例如,如果没有数据,对SSL_read的调用将不会阻塞?

2 个答案:

答案 0 :(得分:1)

如果基础套接字设置为非阻塞,则

SSL_read()(以及其他SSL函数)可以正常工作。如果数据不足,则返回小于零的值;调用返回值的SSL_get_error()将返回SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE,表示SSL正在等待什么。

答案 1 :(得分:0)

BIO_set_nbioBIO_new_socketBIO_new_connect/accept一起使用可能比创建内存BIO的代码少。不确定是否有更多标准。文档更详细地解释了这一点:

http://www.openssl.org/docs/crypto/BIO_s_connect.html