- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
epoll学习笔记
epo11 有两种模式,Ed ge Triggered(简称ET) 和 Level Triggered
(简称LT).在采用这两种模式时要注意的是,假如采用ET 模式,那么仅当状态发
生变化时才会告知,而采用LT 模式类似于本来的 select/poll 操作,只要尚
有没有解决的事件就会一直告知.
以代码来说明问题:
一方面给出 se r ver 的代码,需要说明的是每次accept 的连接,加入可读集的时 候采用的都是ET 模式,并且接受缓冲区是5字节的,也就是每次只接受5字节
的数据:
#include iostream)#inclu de sy s/soc ket.h
#include sys/epoll,h#include netinet/in.h
#include arpa/inet.h#include fcntl.h
#include unis t d.h#include stdio.h
#i nclude errno. hmus ing namespace s td;
A#define MAXLINE 5a#defi ne OPEN MAX 100
#define LISTENQ 20a#d efin e SERV PORT 5000
#defin e I NFTIM 1000
avoid setnonb1 ocking(int sock)A{A int opts;
opts=fcntl(sock,F GETFL);
if (opt s0)
perror(fent1(sock,G ETFL));
e xit(1);
}A opts = Opts|O NONBLOCK;
if(fentl(so ck,F SETFL,opts)0)A{A per ror(fcnt 1(soc
k,SETFL,opts));A
)A
in t main()
int i,maxi,
ssiz e tn;
exi t(1);
listenfd, connfd, sockfd,e pfd, nfds;
ch ar line[MAXLINE];
socklen t clilen;▲ //声明epo l1event结构体的变量,e v用于注册事件,数
组用于回传要解决的事件 s truct epoll evente v,even ts[20];
//生成用于解决ac c ept的epoll专用的文献描述符 e pfd=epo 11 c rea te(256)
struct sockaddr in clientaddr;
s truct sockad dr in serveraddr;
l is ten fd = socket(AF INET,SOCK STREAM,0);
//把socket设立为非阻塞方式
//setnonblocking(listenf d);A //设立与要解决的事件相关的文献描述符
ev. data. fd=li stenfd;
//设立要解决的事件类型 ev.ev ents=EPOLLIN IEPOLLE
T; //ev.even t s =EPOLLIN;A //注册e poll事件
epoll ctl(epfd,EPOLL CTL ADD,listenf d,ev);A bzer o (se rver a d
dr, sizeof(ser veraddr));A serverad dr.sin family = AF
INET;A char *local addr=127,0.0.1;A inet a t on(loc a l add r,(se
rveraddr.sin addr));//h t ons(SERVPORT); serveraddr.sin port=h t o ns(S
ERV PORT);A bind(listenfd,(sockadd r*)serveraddr,sizeof(serve
raddr)); listen(listen fd,LISTENQ);
maxi= 0: for (;;){
//等待e po11事件的发生A
文档评论(0)