使用无线程的 OpenSSL

发布于 2024-09-30 22:35:46 字数 385 浏览 2 评论 0原文

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

使用 OpenSSL API 进行安全编程 托管在 ibm.com 上似乎是实现 OpenSSL 的最佳参考 - 但它实现了一个非常简单的阻塞连接。

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

Whenever I bash into OpenSSL on Windows or Mac I always make my own memory BIOs, and link them up to the platforms message based (asynchronous non blocking) socket implementation. (WSAAsyncSelect on windows: CFSocket on Mac)

Secure programming with the OpenSSL API hosted on ibm.com seems to be the best reference on implementing OpenSSL - but it implements a very simple blocking connection.

Is there a standard way to setup and use OpenSSL with non blocking sockets - such that calls to SSL_read will not block if there is no data for example?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

维持三分热 2024-10-07 22:35:46

如果底层套接字设置为非阻塞,SSL_read()(以及其他 SSL 函数)可以正常工作。如果可用数据不足,它将返回一个小于零的值;对返回值调用的 SSL_get_error() 将返回 SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITE,指示 SSL 正在等待什么。

SSL_read() (and the other SSL functions) work fine if the underlying socket is set non-blocking. If insufficient data is available, it will return a value less than zero; SSL_get_error() called on the return value will return SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE, indicating what SSL is waiting for.

や莫失莫忘 2024-10-07 22:35:46

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

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

Using BIO_set_nbio with either BIO_new_socket or BIO_new_connect/accept is probably less code than creating memory BIOs. Not sure if there's anything more standard than that. The docs explain this in more detail:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文