当前位置:网站首页>OpenSSL的SSL/BIO_get_fd
OpenSSL的SSL/BIO_get_fd
2022-07-03 17:47:00 【星哥玩云】
只要是用到了OpenSSL,总会碰到让人心塞的事。 这次是SSL_get_fd。我用一种很简单的方式创建了一个SSL对象,直接在这个对象上进行SSL的accept:
bio = BIO_new(BIO_s_accept()); BIO_set_accept_port(bio, "1234"); BIO_do_accept(bio); SSL_set_bio(ssl, bio, bio); SSL_accept(ssl);
这样就不必折腾讨厌的sockaddr了。后来我想在和这个SSL对象关联的底层socket上执行setsockopt,想当然的使用了SSL_get_fd/BIO_get_fd这个非常自明的API。到此为止非常棒。接下来就不爽了,我发现setsockiot最终操作的那个描述符是listnen套接字,而不是accept返回的那个套接字。这似乎在API层面上十分合理,毕竟bio的参数就是一个BIO_s_accept,而和它关联的就是一个listen套接字。想要正确的得到accept返回的读写socket描述符,你得这么写:
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
BIO_get_fd(BIO_next(bio), &sd);
BIO_get_fd(BIO_next(bio), &sd);问题是,你必须知道这个BIO stack是如何排列的才能写出上面的代码,做到如此最好的办法就是看OpenSSL的源代码。
BIO的API设计就一定要设计成get/set_fd吗?BIO就一定要和一个fd相关吗?memory类型的BIO如果get fd的话,会返回怎么的错误吗呢?既然BIO构成了一个叠加的IO stack,那么也许之有最下面的那个才会和一个UNIX fd相关联,那为何不直接返回最下面那个呢?
边栏推荐
- Test your trained model
- First day of rhcsa study
- Micro service component sentinel console call
- Notes on problems -- watching videos on edge will make the screen green
- List of financial products in 2022
- TCP congestion control details | 3 design space
- 1147_ Makefile learning_ Target files and dependent files in makefile
- Managing multiple selections with MVVM - managing multiple selections with MVVM
- 微服务组件Sentinel控制台调用
- Select 3 fcpx plug-ins. Come and see if you like them
猜你喜欢

QT learning diary 9 - dialog box

QT学习日记9——对话框

List的stream中Long对象与long判等问题记录

1147_ Makefile learning_ Target files and dependent files in makefile

How to train mask r-cnn model with your own data

Leetcode 669 pruning binary search tree -- recursive method and iterative method

Research Report on investment trends and development planning of China's thermal insulation material industry, 2022-2028

Analysis report on production and marketing demand and investment forecast of China's PVC industry from 2021 to 2026

Leetcode 538 converts binary search tree into cumulative tree -- recursive method and iterative method

Global and Chinese health care OEM and ODM market status survey and investment planning recommendations report 2022-2028
随机推荐
c# . Net tool ecosystem
自动渗透测试工具核心功能简述
TCP congestion control details | 3 design space
SQL injection database operation foundation
Embedded-c language-7
POM in idea XML graying solution
Stm32h7 Hal library SPI DMA transmission has been in busy solution
List的stream中Long对象与long判等问题记录
vs2013已阻止安装程序,需安装IE10
Applet setting multi account debugging
微服务组件Sentinel控制台调用
Five problems of database operation in commodity supermarket system
Kotlin的协程:上下文
PR second time
[combinatorics] recursive equation (case where the non-homogeneous part is exponential | example where the non-homogeneous part is exponential)
University of Electronic Science and technology, accounting computerization, spring 20 final exam [standard answer]
企业级自定义表单引擎解决方案(十一)--表单规则引擎1
Kubernetes resource object introduction and common commands (4)
鸿蒙第四次培训
Implementation of Tetris in C language