C- poll()函数将返回非零的正值,而我注册的插座没有任何事件



这继续发生无限的时间,直到在相应的插座上发生有效事件为止。然后,它可以追溯到正常行为。无法追踪此问题的触发因素。

除了我注册的事件以外,我还应该在插座上寻找其他哪些事件,为什么?我目前已经注册了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,以查看连接到此插座的同伴是否还活着。

POLLHUPPOLLERRPOLLNVAL事件也会导致poll返回,即使尚未在events中指定这些事件(实际上,将这些事件设置为events中的设置将忽略)。检查revents以查看您的文件描述符是否发生了这些事件。

最新更新