这继续发生无限的时间,直到在相应的插座上发生有效事件为止。然后,它可以追溯到正常行为。无法追踪此问题的触发因素。
除了我注册的事件以外,我还应该在插座上寻找其他哪些事件,为什么?我目前已经注册了Pollin&Pollhup。
while ( 1 )
{
//Calling POLL Function;
//Sockets in List ( One Server Socket TCP )
//Sockets of Open TCP Connections
int rv = poll ( ufds , nfds , - 1 );
if (rv == -1)
{
//Error Occured in POLL
}
else if ( rv == 0 )
{
//Time out fromData Recieved
}
else if ( rv > 0 )
{
//Look for events POLLIN or POLLHUP and act correspondingly
}
}
(最可能)触发问题 -
//Called by Main Thread when another thread is
//polling on the respective socket_fd
recv(socket_fd, buffer, 1024, MSG_PEEK | MSG_DONTWAIT);
我正在做一个msg_peek,以查看连接到此插座的同伴是否还活着。
POLLHUP
,POLLERR
和POLLNVAL
事件也会导致poll
返回,即使尚未在events
中指定这些事件(实际上,将这些事件设置为events
中的设置将忽略)。检查revents
以查看您的文件描述符是否发生了这些事件。