我看到epoll_wait()
了监听器套接字之间的以下交互。创建侦听器套接字的事件顺序是:
- 称呼
socket()
- 称呼
bind()
- 调用
fcntl()
并设置为非阻塞 - 打电话
epoll_ctl()
和EPOLL_CTL_ADD
_EPOLLET | EPOLLONESHOT | EPOLLIN
- 称呼
listen()
有后台线程调用epoll_wait()
此套接字和其他线程,如果碰巧在第 4 步和第 5 步之间这样做,EPOLLHUP
则为侦听器套接字接收一个事件。将顺序更改为:
- 称呼
socket()
- 称呼
bind()
- 调用
fcntl()
并设置为非阻塞 - 称呼
listen()
- 打电话
epoll_ctl()
和EPOLL_CTL_ADD
_EPOLLET | EPOLLONESHOT | EPOLLIN
解决了这个问题,但现在我看到了建立连接EPOLLIN
但未收到侦听器套接字的事件的虚假故障。
我知道可以选择使用电平触发模式,但我想让它适用于边缘触发模式。
关于这个问题可能是什么的任何想法?