Closed xxxsen closed 5 years ago
@xxxsen Hey guy, Thanks for ur report.
Could you please give the location of the code? And I will check it later.
Also, could you write an unit test for this if you are free?
poller.cc PollerEpoll::loop_once
判断可读可写应该是2个 if 否则会导致读写事件同时出现的时候要2次 epoll_wait才能处理完,另外如果读事件一直出现还会导致写事件一直得不到处理。。简单瞄了一眼。。不知道有没有搞错。。😁😁
赞同。这里应该使用两个if语句进行判断。可以参见libevent的处理方式。传送门
我写了个简单的测试用例, 如果一直有读事件的话,写事件时常会得不到及时处理 服务端 https://github.com/fangxian/handy/blob/3631a86176b04757c274e454e27f74e127e2b34c/examples/test_svr.cc 客户端 https://github.com/fangxian/handy/blob/4d768307d16d33d93a951b51263276747f967978/examples/test_cli.cc
loop_once()中添加了debug日志来查看一次epoll_wait是处理了读/写 or读写事件都处理 https://github.com/fangxian/handy/blob/4d768307d16d33d93a951b51263276747f967978/handy/poller.cc#L95
已更新
判断可读可写应该是2个 if 否则会导致读写事件同时出现的时候要2次 epoll_wait才能处理完,另外如果读事件一直出现还会导致写事件一直得不到处理。。简单瞄了一眼。。不知道有没有搞错。。😁😁