当前位置:网站首页>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相关联,那为何不直接返回最下面那个呢?
边栏推荐
- 毕业总结
- 聊聊支付流程的设计与实现逻辑
- [RT thread] NXP rt10xx device driver framework -- Audio construction and use
- 鸿蒙第四次培训
- TCP拥塞控制详解 | 3. 设计空间
- QT adjust win screen brightness and sound size
- STM32H7 HAL库SPI DMA发送一直处于busy的解决办法
- RDS数据库的监测页面在哪看?
- 微服务组件Sentinel控制台调用
- [mathematical logic] equivalent calculus and reasoning calculus of predicate logic (individual word | predicate | quantifier | predicate logic formula | two basic formulas | proposition symbolization
猜你喜欢
Discussion sur la logique de conception et de mise en oeuvre du processus de paiement
Leetcode 108 converts an ordered array into a binary search tree -- recursive method
[RT thread] NXP rt10xx device driver framework -- RTC construction and use
Select 3 fcpx plug-ins. Come and see if you like them
How to install PHP on Ubuntu 20.04
Is AI too slow to design pictures and draw illustrations? 3 sets of practical brushes to save you
Test your trained model
Draw some simple graphics with MFC
Global and Chinese health care OEM and ODM market status survey and investment planning recommendations report 2022-2028
MySQL has been stopped in the configuration interface during installation
随机推荐
[vscode] convert tabs to spaces
QT learning diary 9 - dialog box
Tensorboard quick start (pytoch uses tensorboard)
A day's work list of an ordinary programmer
Implementation of Tetris in C language
Deops入门
List的stream中Long对象与long判等问题记录
Play with fancy special effects. This AE super kit is for you
As soon as we enter "remote", we will never regret, and several people will be happy and several people will be sad| Community essay solicitation
Research on Swift
Records of long objects and long judgments in the stream of list
Inheritance of ES6 class
Hongmeng fourth training
Online assignment 3 of mobile Internet technology in the 20th autumn of electronic technology [standard answer]
ArrayList分析3 : 删除元素
Investigation on the operation prospect of the global and Chinese Anti enkephalinase market and analysis report on the investment strategy of the 14th five year plan 2022-2028
1164 Good in C
远程办公工具分享|社区征文
毕业总结
[RT thread] NXP rt10xx device driver framework -- pin construction and use