pselect
TCP 接続を待機している実行中です。それpselect
は独自のスレッドで実行されているため、多数のスレッドを実行しています。
それらにタイムアウトを設定していますが、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)
}
それが私の問題である場合、デバッグするために他に何ができますか? sockstat で見ることはできますが、どのソケット fd が開いたままになっているのかを正確に判断するのは困難です。