2

我有一个pselect正在等待 TCP 连接的运行。那pselect是在它自己的线程中运行的,因此我有一堆在运行。

我对那些设置了超时,pselect但是,当我运行时sockstat,我似乎有一些永远不会关闭的连接。他们中的 99% 都这样做。当我完全关闭正在建立连接的客户端时,我会认为在超时时间之后,我将能够关闭这些套接字。我设置了断点来检查返回值是否为零,但它从未发生过。

在psuedo这就是我所拥有的

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 处于打开状态。

4

1 回答 1

2

您的线程可能在(不包括在内)情况下旋转,else因为从另一端关闭的套接字既可读又可写。要进入超时情况,您需要在超时期间保持另一端打开。

(您所处的情况是POLLHUPpoll()条款中)

于 2013-01-19T01:23:12.247 回答