2
我有一個正在等待TCP連接的pselect
運行。那pselect
正在自己的線程中運行,因此我有一堆運行。TCP套接字永遠不會關閉
我在這些pselect
上設置了一個超時時間,但是,當我運行sockstat
時,我有一些永遠不會關閉的連接。其中99%是。當我關閉完全建立連接的客戶端時,我認爲在超時之後,我可以關閉這些套接字。我已經把斷點檢查爲零的返回值,但它從來沒有發生。
在僞這就是我
if((ret == pselect(..., timeout, NULL) <0){
//check errors
} else if (ret == 0)
{
//close connection for timing out
//I never land here, even though I can close the client side (thus presumably closing the connection)
}
還有什麼我可以做調試,如果這是我的問題嗎?我很難確切地知道哪個socket fd被打開了,儘管我可以在sockstat中看到它們。
我看到...我會給這個try..I也有一些其他的別的塊來檢查FD的中集,但我不認爲我只是有一個捕獲所有其他 – Derek
@Derek:你不需要一個全面的'else',只是在你顯示的其他一些子句中,你會看到一個遠程關閉的套接字在讀取集合和'recv'將返回'ECONNRESET'。 –
如果對等方斷開,它將返回零。 – EJP