套接字和epoll的so_error行为

时间:2019-05-08 23:38:42

标签: sockets unix epoll

我已经从 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监视此套接字时会发生什么情况。

第一个事件将包含有意义的EPOLLINEPOLLERR标志。假设句子中有排队数据,则在此套接字上对read()的调用将返回数据而不是错误,

现在,假设我没有将更多的数据排队,那么我想将套接字重新设置到epoll实例,在下一次对EPOLLERR的调用时,它将为该套接字报告epoll_wait吗?这就是我的假设,因为引用的句子中没有任何内容表明在上次read()调用之后SO_ERROR已被重置,但是我可能是错的。

谢谢

0 个答案:

没有答案