Unp高级i/o复用技术 读书笔记 (v0.3)

Unp-高级i/o复用技术 读书笔记

 

话说unpV2书上没有epoll,所以老师专门补充了此章节。

更新:由于ppt 使用 发送到 word...图片都很小。。下次记着调大图片。

clip_image002

clip_image004

第一阶级:要点:epoll的特点:事件的增量添加,删除。触发条件。..

clip_image006


Todo(google):   如果有poll epoll 函数,的函数对比就好啦。

clip_image008

clip_image010

66第一阶级:ctl看起来是event(生命周期)。下图中,看好 函数指针和events

clip_image012

clip_image014

66epollin…让我联想到 android .init.c4个对列,里有pollevent类型,还有oneshot 属性

第一阶级:几大类,有in/out…..Pri(带外数据)....read/writenorm,band)主要的看下下个ppt

clip_image016

clip_image018

clip_image020 

66:要点2epoll_wait

clip_image022 

clip_image024

3.epoll 客户端:create…registerEvent… waitEvent…

clip_image026

注:常规的传输:sin.read…socket.write…; 否则socket.shutdown…

clip_image028

第二种情况;(todo,不懂),sock.read…sock.write…为何客户端维持sock.read?

clip_image030

 

		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服务器()

clip_image032

 

[todo.不懂]第一阶级读码;waitevent… accept… socket.insert…. registerEvent..

               [??]循环中,内外的意义?

clip_image034

 

clip_image036

 

原文地址:https://www.cnblogs.com/titer1/p/2004414.html