You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非阻塞套接字中SSL_read_ex读取异常:请求谷歌无效资源时卡壳

非阻塞套接字下SSL_read_ex请求无效资源的阻塞问题及解决

问题现象

在非阻塞套接字环境中使用SSL_read_ex时出现异常:请求谷歌正常资源(如GET /)可正常获取页面,但请求无效资源(例如在https://www.google.com/后追加无效路径)时,程序完全失效。

背景与实现流程

为自研解释器开发libssl封装库,用于HTTP库访问HTTPS站点,采用非阻塞套接字进行数据交互,当前SSL读取流程为:

  • 调用SSL_read_ex,若读取到数据则直接返回给用户
  • 若返回SSL_ERROR_WANT_READ,先检查out_bio是否有待发送数据,如有则发送后重新监听套接字
  • 将套接字接收到的数据写入in_bio,再次调用SSL_read_ex

排查过程

  • 上述流程在多数场景下正常运行,但请求谷歌不存在的页面时,封装库会卡在SSL_ERROR_WANT_READ状态无法继续
  • 通过Wireshark抓包确认,套接字无后续数据包传输,排除事件循环本身的问题
  • 对比wget的数据包,发现与封装库的请求数据包无差异,但wget能正常接收404响应,而封装库无法完成读取

解决办法

设置SSL_MODE_AUTO_RETRY标志,并启用SSL_set_read_ahead后,问题得到解决。

内容的提问来源于stack exchange,提问作者jdl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:24:50