主要观点:将基于简单阻塞套接字的代码迁移到使用 libuv 以允许每个线程有多个连接,同时使用 TLS,过程复杂且经历多次尝试。
关键信息:
- 有关于此的 GitHub 项目,但对 libuv 和 OpenSSL 了解甚少,故自己编写 TLS 回显服务器来理解。
- OpenSSL 有 BIO 抽象,整体思路是设置 libuv 接受连接、用服务器配置设置 OpenSSL 等。
- 管理状态时,
SSL_write
可能需要先SSL_read
再重试,同步调用时处理较 awkward,异步回调编程中状态管理多。 - 意识到对 libuv 的方法有概念错误,libuv 基于循环思想,不同于标准异步编程。
- 定义了一些结构体来组织系统,如
connection_handler_t
、tls_uv_server_state_t
、tls_uv_connection_state_t
等。 - 构建 TLS 回显服务器的代码示例,包括连接创建、SSL 初始化、libuv 设置等,处理读写操作及处理重新协商等情况。
重要细节: - 在
complete_accept_ssl_flush
等函数中处理 SSL 相关操作及状态管理。 - 在
on_new_connection
等函数中处理新连接的接受、SSL 设置等。 - 在
handle_read
等函数中处理读取数据及与 SSL 的交互。 - 在
check_if_need_to_flush_ssl_state
等函数中处理 SSL 缓冲区的刷新和待处理写操作。 - 代码示例中未处理错误,但展示了一个相对简洁的 TLS 回显服务器实现,约 350 行 C 代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。