FIN从服务器收到但连接与libcurl挂起

时间:2013-11-04 21:14:19

标签: c++ ssl libcurl wireshark

我正在使用libcurl并且我需要一些信息来解决当前我面临的问题“连接似乎已经死了”

对于安全的邮件传输,我使用libcurl轻松执行SSL支持(TLS)来连接服务器。

然而,对于我所面对的问题,我没有在互联网上看到足够的信息(可能我没有用正确的词语看)

在高层次上,这就是发生的事情。 我能够成功建立与服务器的连接,我能够发送 - 接收数据。 如果我让会话空闲一小窗口(15秒),然后触发进一步的事务/消息,我看到“连接似乎已经死了”,并且在libcurl的控制台日志上“重新连接”。 但它会在那里停留,并且当卷曲自然而然地在轻松演出时超时。

我解雇了“wireshark”并分析我在开始重新使用现有连接之前收到来自服务器的“FIN,ACK”和“ACK”数据包。 但是,由于我等待了相当长的时间来回应服务器,从客户端到服务器的ACK,我猜服务器不会满足我未来的任何请求。

有没有办法可以立即响应服务器获取FIN,连接期间收到的ACK?

这是libcurl的问题,或者我应该和服务器团队讨论为什么我在我的连接中看到FIN,ACK

1 个答案:

答案 0 :(得分:-1)

您是否在客户端/服务器之间启用了TCP keep-alive。请检查您在curl中指定的保持活动值。如果客户端没有任何内容可以发送,那么正确保持活动间隔将确保连接处于活动状态。

来自libcurl帮助文档: CURLOPT_TCP_KEEPALIVE

通过很久。如果设置为1,将发送TCP keepalive探测。如果操作系统支持CURLOPT_TCP_KEEPIDLE和CURLOPT_TCP_KEEPINTVL选项,则可以控制这些探测的延迟和频率。设置为0(默认行为)以禁用keepalive探测