只要是用到了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描述符,你得这么写:

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相关联,那为何不直接返回最下面那个呢?

转载于:https://blog.51cto.com/dog250/1592061

OpenSSL的SSL/BIO_get_fd相关推荐

  1. fatal: Unsupported SSL backend ‘“openssl”‘. Supported SSL backends:

    $ git clone https://github.com/wdg1111/wdgreact.git Cloning into 'wdgreact'... fatal: Unsupported SS ...

  2. 31.openssl编程——SSL实现

    31.1 概述 SSL协议最先由netscape公司提出,包括sslv2和sslv3两个版本.当前形成标准为tls协议(rfc2246规范)和DTLS(rfc4347,用于支持UDP协议).sslv3 ...

  3. 用OpenSSL编写SSL,TLS程序

    http://zhoulifa.bokee.com/6134045.html http://blog.sina.com.cn/s/blog_86ca13bb0100vaph.html http://b ...

  4. OpenSSL编写SSL,TLS程序

    一.简介: SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security) ...

  5. 密码学专题 OpenSSL中SSL相关指令

    再谈SSL和OpenSSL 由于SSL协议已经是密码学和PKI技术中非常具体的一个应用协议,为了实现它,OpenSSL在密码学基础应用和PKI技术的基础实现上做了大量的工作,才逐渐形成和奠定了Open ...

  6. 使用Openssl签发SSL证书

    本文主要记述在Linux系统上使用Openssl创建SSL证书的流程,作为个人学习笔记.自签名证书分为自签名私有证书和自签名CA证书两种.自签名私有证书无法被吊销,自签名CA证书可以被吊销. 什么是o ...

  7. 通过openssl学习ssl证书。

    通过抓包学习ssl:https://www.cnblogs.com/xiaxveliang/p/13183175.html 通过openssl学习ssl:http://3ms.huawei.com/k ...

  8. OpenSSL编写SSL,TLS程序***

    一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...

  9. openssl编写SSL、TLS程序

    一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...

最新文章

  1. .NET面试题(三)
  2. 仿网易云音乐客户端的底部播放器的实现思路
  3. Eclips将lib打入war中
  4. js高级程序设计 - 温故而知新
  5. JAVA类的无参方法
  6. lua脚本之lua语言简介以及lua的安装
  7. python高级-异常(13)
  8. html 图片旋转插件,jQuery插件expander实现图片翻转特效
  9. 搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(四)
  10. 如何在CentOS 7上安装和安全配置MariaDB 10
  11. C语言叠堆在变量周围,C语言及ARM中堆栈指针SP设置的理解与总结
  12. CRNN——文本识别算法
  13. 因为看了这些书,我大二就拿了腾讯OFFER
  14. 干货| 364套各类风格毕业设计答辩PPT模板~
  15. YOLOv3的环境配置
  16. JVM MAT使用分析详解
  17. unity——UI拖拽实现拼图
  18. 前言,flutter页面切换动画
  19. chrome打开链接隐私设置错误_解决用谷歌浏览器访问https网站遇到的“隐私设置错误 您的连接不是私密连接”问题...
  20. student dictionary

热门文章

  1. 作业09-集合与泛型
  2. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少...
  3. Centos6.8下搭建SVN服务器
  4. hdu 5131 (2014广州现场赛 E题)
  5. C++ 对数组sizeof 和对数组元素sizeof
  6. sql语句,怎么查看一个表中的所有约束
  7. 蜻蜓FM战略项目经理程彤博:真实需求背后的供给关系
  8. PMCAFF微课堂视频合集 | O2O产品的颠覆与布局
  9. 自媒体发展陷入僵局,社群媒体将成出路?呵呵…
  10. PMCAFF | 十大最坑爹的产品设计缺陷你遇到过几个?