Cha*_*l72 9 c security ssl openssl nonblocking
通常,OpenSSL库(C API)似乎提供了两种方法来执行所有操作:您可以使用根据自己的喜好配置的普通系统套接字,也可以使用BIO类似于流的OpenSSL 对象.
但是,我经常对一些重复的功能感到困惑.例如,如何使SSL连接无阻塞?一种方法似乎是简单地访问底层文件描述符并使用它将其设置为非阻塞fcntl.但是还有一个OpenSSL API函数BIO_set_nbio,它接受一个BIO*对象并将其设置为非阻塞模式.
那么设置非阻塞SSL套接字的最佳方法是什么?如果您将OpenSSL传递给已经设置为非阻塞模式的本机文件描述符,会发生什么fnctl?你还需要专门调用BIO_set_nbio才能使BIO对象无阻塞吗?
我认为大多数人更喜欢BIO接口,但BIO例程只使用平台上可用的任何本机非阻塞套接字API.我不知道如果混合搭配会发生什么.
请注意,SSL的非阻塞I/O 通常比TCP 更复杂.如果你不理解这种情况你将会折磨自己.有关John Viega和Eric Rescorla的另外一本书,你可以阅读OpenSSL邮件列表,以了解这引起的胃灼热.一些很好的代码示例显示了使用OpenSSL的非阻塞SSL编程,包含在TOR项目的软件和curl实用程序中.
| 归档时间: |
|
| 查看次数: |
6873 次 |
| 最近记录: |