2010-06-08 39 views
0

我對select()有一個偶然的問題,在我這裏超時。我已經設定了二十秒。系統將正確處理100個交易,但偶爾會出現一個失敗,並且Selet超時。它每隔幾秒就進行一次交易,每筆交易打開和關閉TCP連接。我認爲我的應用程序正在連接到服務器可能有很多連接嘗試懸而未決,但沒有4226事件顯示在日誌中解決Windows中select()的偶爾超時問題

我還注意到使用wireshark時我發現一個SYN,RST響應SYN我顯然發送。這隻會在第一或第二秒內發生幾次,然後我在Wireshark中看不到任何活動。

+0

請發佈您正在使用的代碼。然後我們可以分析它並提出一些建議。這聽起來像你試圖建立連接,但沒有檢查它的成功,然後阻止選擇響應。但是沒有代碼就不可能說出來...... – 2010-06-08 19:57:11

回答

0

您可能需要在每次進入select時重新生成超時值。選擇顯然可以修改這個值:

here

select() may update the timeout argument to indicate how much time was left. 

如果修改它,你重用它輸入回選擇,你可能不會得到你所期望的超時。這是一個Linux手冊頁,雖然,你的情況可能非常與Windows,尤其是在男子頁指出:

glibc的PSELECT()函數不 修改其超時參數;這是POSIX.1-2001所要求的行爲

有點推測性的答案,希望它有幫助。也許如果你發佈了一些代碼,我們可以證實/否定這個假設。