【发布时间】:2021-12-21 12:21:41
【问题描述】:
我正在为套接字编写一个协程包装器,作为协程用例的演示,我正在为如何安全地使用 epoll(不引入竞争条件)而苦苦挣扎。
我已经知道我必须使用边缘模式EPOLLET 和EPOLLONESHOT。但现在我不确定什么时候应该重新启动插座。
我应该在调用非阻塞操作之前还是之后重新武装?我想确保我既不会错过活动,也不会收到幻影。
// epoll & socket setup
int ret;
ret = epoll_ctl(epoll_, EPOLL_CTL_MOD, ...); // rearm here
//...
ret = read(...);
//...
ret = epoll_ctl(epoll_, EPOL_CTL_MOD, ...); // or here?
int ret = epoll_wait(...);
【问题讨论】: