2009-11-10 100 views
1

我正在使用linux。 我有一個HTTP客戶端,它從HTTP服務器請求一些數據。 HTTP客戶端用C編寫,HTTP服務器用Perl編寫。 我想模擬客戶端的TCP重傳超時。模擬HTTP/TCP重傳超時

我假定正常關閉套接字不會導致客戶端重新傳輸請求。一旦它得到的HTTP GET請求

  1. 退出服務器:

    所以,我想以下情形。但是,我注意到一旦應用程序退出,套接字仍然優雅地關閉。我發現即使應用程序未在套接字上調用「close」,服務器也會向客戶端發起FIN.ACK消息。我已經注意到這個行爲在一個簡單的TCP服務器和用C程序編寫的客戶端上。

  2. 服務器不會對客戶端的GET請求發送任何響應。在這種情況下,我注意到服務器仍然發送FIN,ACK。 似乎在這些情況下,操作系統(Linux)負責關閉與對等方的套接字。 有什麼辦法來抑制這種行爲(使用ioctl或setsockopt選項)或其他方式來模擬TCP重傳超時。

回答

1

你可以嘗試設置,阻止從服務器到客戶端,這將導致客戶端重新發送任務上的數據包的防火牆規則。在Linux上,這可能會使用iptables完成,但不同的發行版有不同的控制方法。

+0

感謝您的回覆。 iptables可能工作。我必須牢記的唯一想法是在TCP連接建立之後阻塞傳出的數據包(否則我會得到TCP連接設置失敗)。 – 2009-11-10 17:57:20

+0

你可能只需要阻塞PSH(推送)標誌設置的數據包,我相信這是表示數據正在發送的標誌。如果我沒有記錯,連接握手是SYN,SYN + ACK,ACK,那麼連接仍然會打開。 – qid 2009-11-10 18:44:00