我正在使用linux。 我有一个HTTP客户端,它从HTTP服务器请求一些数据。 HTTP客户端用C语言编写,HTTP服务器用perl编写。 我想在客户端模拟TCP重传超时。
我认为优雅地关闭套接字不会导致客户端重新发送请求。
所以我尝试了以下场景:
获取HTTP GET请求后立即退出服务器。但是,我注意到一旦应用程序退出,套接字仍然正常关闭。我看到服务器向客户端发起FIN.ACK消息,即使应用程序没有在套接字上调用“close”。我已经注意到在用C程序编写的简单TCP服务器和客户端上的这种行为。
服务器不会向客户端的GET请求发送任何响应。在这种情况下,我注意到服务器仍然发送FIN,ACK。 似乎在这些情况下OS(linux)负责关闭与对等体的套接字。 有没有办法抑制此行为(使用ioctl或setsockopt选项)或任何其他方式来模拟TCP重新传输超时。
答案 0 :(得分:1)
您可以尝试设置阻止从服务器到客户端的数据包的防火墙规则,这会导致客户端重新传输任务。在Linux上,这可能是使用iptables完成的,但不同的发行版有不同的控制方法。
答案 1 :(得分:1)
此问题之前已经讨论过here