Unp-高级i/o复用技术 读书笔记 (v0.3)
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..
[??]循环中,内外的意义?

















浙公网安备 33010602011771号