我已经从 Unix网络编程书
中阅读了这句话如果在进程调用read时so_error不为零,则没有 数据返回,读取返回–1,errno设置为so_error的值 (TCPv2第516页)。然后将so_error的值重置为0。 是为套接字排队的数据,该数据由读取返回 错误条件。如果在进程调用时so_error不为零 写入–1,并且将errno设置为so_error的值(第495页) TCPv2)并将so_error重置为0。
如果我正确理解,似乎表明如果有要从套接字读取的数据,则SO_ERROR选项不会重置为0:如果有队列中的数据排队,则该数据将由读取而不是错误条件
我想知道使用epoll监视此套接字时会发生什么情况。
第一个事件将包含有意义的EPOLLIN
和EPOLLERR
标志。假设句子中有排队数据,则在此套接字上对read()
的调用将返回数据而不是错误,
现在,假设我没有将更多的数据排队,那么我想将套接字重新设置到epoll实例,在下一次对EPOLLERR
的调用时,它将为该套接字报告epoll_wait
吗?这就是我的假设,因为引用的句子中没有任何内容表明在上次read()
调用之后SO_ERROR已被重置,但是我可能是错的。
谢谢