我已经看过使用epoll_wait
的所有epoll exmaples
int i, n;
...
n = epoll_wait(epfd, events, MAX_EVENTS, -1);
for (i = 0; i < n; ++i) {
do_something_with(events[i]);
}
我将其更改为
int i;
...
for (i = 0; i < epoll_wait(epfd, events, MAX_EVENTS, -1); ++i) {
do_something_with(events[i]);
}
当套接字连接到此程序并发送内容时,epoll_wait
将仅返回一次,具有连接操作,但在此之后无法读取(先前版本,两次,连接和读取)。这有什么神奇之处?
完整的C代码位于http://pastebin.com/bx4hbhdM
Python客户端
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 4999))
s.sendall('hello')
s.close()
答案 0 :(得分:1)
更改后的版本会在每次循环迭代时调用epoll_wait,因此在仅处理一个事件后再次阻塞。你必须先预先调用epoll_wait,然后再进行循环。