gpt4 book ai didi

c++ - 在 docker 容器中重新连接后 boost1.62 套接字损坏

转载 作者:太空宇宙 更新时间:2023-11-04 12:31:50 25 4
gpt4 key购买 nike

我们有一个带有 boost1.62 和 libssl1.0 的 C++ 应用程序,它打开一个到 lighttpd Web 服务器(远程)的 TLS 连接。

这在我们已经推出的任何设备上都能正常工作。现在我们正尝试在容器中使用这个应用程序。应用程序启动,一切正常但是。

当连接因任何原因被重置时,应用程序会尝试通过与套接字建立新的 TCP 连接来重新连接。

在该套接字上使用 TLS 创建 HTTPS 连接失败并出现 EOF。然后应用程序尝试重新连接并得到相同的错误 -> 无休止的重新连接循环。

我记录了流量并看到了以下内容:

  1. 一切都好
  2. 记录了 TLS 警报,有时还记录了 TCP RESET。
  3. 客户端发送SYN
  4. 服务器发送SYN ACK
  5. 客户端发送ACK
  6. 客户端发送FIN、ACK
  7. 服务器发送ACK
  8. 服务器发送FIN、ACK
  9. 客户端发送ACK

第 3 步到第 7 步在不到 3 毫秒内完成。一旦第 7 步通过,就会从第 3 步开始建立新连接。

我在主机上使用 ubuntu 18.04 作为基础镜像。 (均为 x64)主机和容器都使用相同的库。因此,我认为这不是使用过的库的问题。

该应用程序在多个 arm32v7 和 x64 设备上的生产环境中运行了一年多。那时从未发生此错误。

奇怪的是,如果应用程序配置为使用纯 HTTP 而不是 HTTPS,则不会发生错误。

有什么建议吗?根据我的知识,我可以排除以下情况:

  • 错误的依赖
  • 配置错误的内核(容器和主机使用相同的内核)

谢谢你的帮助

最佳答案

断开连接后,我们重新使用旧套接字。这在 docker 外部完美无缺。在 docker 内部,它会产生所描述的行为。

解决方法:删除损坏的套接字并创建一个新套接字。

但这对性能不利。

关于c++ - 在 docker 容器中重新连接后 boost1.62 套接字损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com