博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
epoll的一些关键点和总结(二)
阅读量:4189 次
发布时间:2019-05-26

本文共 985 字,大约阅读时间需要 3 分钟。

epoll异步精髓(ET模式):

2个epoll初始化片段:

epoll_event ev;ev.events = EPOLLIN | EPOLLET;ev.data.fd = fd;int ret = epoll_ctl(_epfd, EPOLL_CTL_ADD, fd, &ev);
_pEvents = new epoll_event[EPOLL_SIZE - 1];int n = epoll_wait(_epfd, _pEvents, EPOLL_SIZE - 1, EPOLL_TIME_OUT);

epoll_ctl第三个参数为需要监听的fd,第四个参数告诉内核要监听的事件,data为用户携带的参数,一般为了方便都会顺带这个监听的fd,也可用自定义类型。

epoll_wait第二个参数是 N个监听到的事件的数组,内核会把这N个发生事件的epoll_ctl中第四个参数的数据拷贝到这里。

epoll_wait循环里:

if (_pEvents[i].events & EPOLLIN)				{					OnReadEpoll(i);				}				else if (_pEvents[i].events & EPOLLOUT)				{					OnWriteEpoll(i);				}

OnReadEpoll中:

epoll_event ev;		ev.data.fd = _pEvents[i].data.fd;		//也可用自定义类型mydata		//ev.data.ptr = mydata		ev.events = EPOLLOUT | EPOLLET;		epoll_ctl(_epfd, EPOLL_CTL_MOD, _pEvents[i].data.fd, &ev);

读到数据,改为监听是否可写。

OnWriteEpoll中:

epoll_event ev;		ev.data.fd = _pEvents[i].data.fd;		ev.events = EPOLLIN | EPOLLET;		epoll_ctl(_epfd, EPOLL_CTL_MOD, _pEvents[i].data.fd, &ev);

 
写了数据,改为监听是否可读。

以上为同一个fd中数据收发的关键点,如果是跨fd转发程序,情况将更复杂,此处暂不赘述

转载地址:http://lysoi.baihongyu.com/

你可能感兴趣的文章
Palm之祭
查看>>
两种不同的Web应用
查看>>
.Net多线程总结(一)
查看>>
让 ASP.NET MVC 支持 HotSwap
查看>>
Http请求处理流程
查看>>
如何利用客户端缓存对网站进行优化?
查看>>
ASP.NET 应用程序性能优化
查看>>
lr监视的性能计数器
查看>>
优化 SQL Server 查询性能
查看>>
小道消息 sd2.0大会国外大师介绍
查看>>
基于XML-RPC的BloggerAPI
查看>>
RSS 2.0规范
查看>>
梅子开源js框架研究(1)
查看>>
《给初学者的Windows Vista的补遗手册》之072
查看>>
《给初学者的Windows Vista的补遗手册》之070
查看>>
《给初学者的Windows Vista的补遗手册》之064
查看>>
《给初学者的Windows Vista的补遗手册》之063
查看>>
《给初学者的Windows Vista的补遗手册》之062
查看>>
有道 值得一道
查看>>
《给初学者的Windows Vista的补遗手册》之057
查看>>