一般来说,OpenSSL 库(C API)似乎提供了两种方法来做所有事情:您可以使用根据您的喜好配置的普通系统套接字,或者您可以使用 OpenSSLBIO
有点像流的对象。
然而,我经常对一些重复的功能感到困惑。例如,如何使 SSL 连接非阻塞?一种方法似乎是简单地访问底层文件描述符并将其设置为非阻塞使用fcntl
。但还有一个 OpenSSL API 函数称为BIO_set_nbio
其中需要一个BIO*
对象并将其设置为非阻塞模式。
那么设置非阻塞 SSL 套接字的最佳方法是什么?如果您向 OpenSSL 传递一个本机文件描述符(即already通过设置为非阻塞模式fnctl
?还需要专门打电话吗BIO_set_nbio
使BIO
对象非阻塞?
我认为大多数人更喜欢 BIO 接口,但 BIO 例程只使用平台上可用的任何本机非阻塞套接字 API。我不知道如果混合搭配会发生什么。
请注意,SSL 的非阻塞 I/O 是much一般来说,比 TCP 更棘手。如果你不明白这一点,你就会折磨自己。有书由约翰·维加另一个由埃里克·雷斯科拉进入这一点,您当然可以阅读 OpenSSL 邮件列表来了解这造成的胃痛。软件中包含一些很好的代码示例,展示了使用 OpenSSL 进行非阻塞 SSL 编程TOR项目,以及curl公用事业。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)