Unp-高级i/o复用技术 读书笔记
话说unpV2书上没有epoll,所以老师专门补充了此章节。
更新:由于ppt 使用 发送到 word...图片都很小。。下次记着调大图片。
第一阶级:要点:epoll的特点:事件的增量添加,删除。触发条件。..
Todo(google): 如果有poll 与epoll 函数,的函数对比就好啦。
66第一阶级:ctl看起来是event(生命周期)。下图中,看好 函数指针和events
66:epollin…让我联想到 android .init.c中4个对列,里有pollevent类型,还有oneshot 属性
第一阶级:几大类,有in/out…..Pri(带外数据)....read/write(norm,band)主要的看下下个ppt
66:要点2,epoll_wait
3.epoll 客户端:create…registerEvent… waitEvent…
注:常规的传输:sin.read…socket.write…; 否则socket.shutdown…
第二种情况;(todo,不懂),sock.read…sock.write…为何客户端维持sock.read?
ep.create(); events[0].events = EPOLLIN; events[0].data.fd = fileno(stdin); ep.registerEvent(fileno(stdin), events[0]); events[0].data.fd = sock.getFd(); ep.registerEvent(sock.getFd(), events[0]); while (true) { int ret, length; ret = ep.waitEvent(events, 2, -1); for (int i = 0; i < ret; ++i) { if (events[i].data.fd == fileno(stdin)) { if ((length = sin.read(sbuf, BUFFER_SIZE)) == 0) { sock.shutdown(); ep.unregisterEvent(events[i].data.fd); } else length = sock.write(sbuf, length); } else if (events[i].data.fd == sock.getFd()) { if ((length = sock.read(rbuf, BUFFER_SIZE)) == 0) { ep.unregisterEvent(events[i].data.fd); goto BREAK; } length = sout.write(rbuf, length); } else throw EXCEPTION(); } }
重点:epoll服务器()
[todo.不懂]第一阶级读码;waitevent… accept… socket.insert…. registerEvent..
[??]循环中,内外的意义?