当前位置: 首页 > wzjs >正文

要解析做邮箱以及网站网络营销品牌推广公司

要解析做邮箱以及网站,网络营销品牌推广公司,av12网站建设中,涿州网站建设一、为什么要用Poll 由于select参数太多,较于复杂,调用起来较为麻烦;poll对其进行了优化 二、poll机制 poll也是一个系统调用,每次调用都会将所有客户端的fd拷贝到内核空间,然后进行轮询,判断IO是否就绪…

一、为什么要用Poll

由于select参数太多,较于复杂,调用起来较为麻烦;poll对其进行了优化

二、poll机制

poll也是一个系统调用,每次调用都会将所有客户端的fd拷贝到内核空间,然后进行轮询,判断IO是否就绪,然后返回就绪的客户端数量。
底层也是select的实现,但是相比于select,poll解决了其参数的限制问题。

struct pollfd{int fd;                 //传入需要处理客户端的fdshort events;           //判断是否可读,可写或者可出错short revents;          //返回该客户端是否真正可读,可写或者可出错
}int poll(struct pollfd *fds, nfds_t nfds,const struct timespec *tmo_p);
/*
fds: 需要进行处理的客户端
nfds: 表示fds的数量,最大不可超过fds的边界值,因为是从0开始索引,一般 + 1
tmo_p: 超时时间,< 0 代表永久阻塞, ==0 代表立即响应,不阻塞, > 0 等待具体时间,单位毫秒
return value: 失败就是-1,成功就是fds的数量
*/

三、具体实操

1、创建pollfd数组,用于存放客户端的fd,以及事件类型

struct pollfd fds[1024]={0};              
fds[socketfd].fd = socketfd;        //将监听描述符加入到数组中
fds[socketfd].events = POLLIN;      //监听可读事件

2、调用poll函数,阻塞等待事件发生

int maxfd = socketfd;             //对集合遍历的最大值,集合也有边界,从0开始
while(true){int nready = poll(fds, maxfd + 1, -1);    //等待IO就绪cout<<"nready:"<<nready<<endl;if(nready < 0){                //出错处理cout << "select error:" << strerror(errno) << endl;continue;}else{//accept操作,此处省略}//recv操作,此处省略
}

3、遍历就绪的客户端,处理新连接,accept操作

if(fds[socketfd].revents & POLLIN){         //是否可读,可读那就接收数据=====acceptint clientfd = accept(socketfd, (struct sockaddr *)&clientaddr, &len);cout<<"clientfd:"<<clientfd<<endl;       //获取到客户端的连接描述符fds[clientfd].fd = clientfd;fds[clientfd].events = POLLIN | POLLERR;    //监听可读事件和错误事件if(clientfd > maxfd){               //更新遍历的边界,回收旧的连接,更新边界值maxfd = clientfd;}
}

4、recv操作,接收数据

//recv处理
for(int i = socketfd + 1; i <= maxfd; i++){cout<<"i:"<<i<<endl;if(fds[i].revents & POLLIN){                 //判断IO是否可读char buffer[1024] = {0};int count = recv(i, buffer, 1024, 0);if(count == 0){cout<<"client close"<<endl;close(i);fds[i].fd = -1;                //将无效的描述符设置为-1,防止下次遍历出错fds[i].events = 0;                //将无效的描述符的事件设置为0,防止下次遍历出错continue;}cout << "buffer:" << buffer << endl;//返回信息count = send(i, buffer, count, 0);}
}

在这里插入图片描述

四、总结

1、poll是对select的优化,解决了select的参数限制问题。

2、select的fd存在数量上的限制,虽然在使用pollfd时,会对其进行设置范围,但是不会像select一样,有底层代码进行限制。

http://www.dtcms.com/wzjs/265942.html

相关文章:

  • 温州集团网站建设搭建网站平台
  • 开发一个app大概需要多少钱?外包seo服务收费标准
  • 大学培训中心网站建设广告公司营销策划方案
  • 互联网登录的网站名百度竞价广告推广
  • wordpress id 连续二十条优化措施
  • 做网站都去哪申请网址官网seo是什么意思
  • 芜湖做网站哪个公司好360竞价推广怎么做
  • 和动物做的网站谷歌推广技巧
  • 广州建网站定制营销型网站策划
  • 合肥 电子商务 网站建设优化用户体验
  • 网站注册费计入什么科目外贸网站建站和推广
  • 日照在线网站网站keywords
  • 自己做的网站怎么上传网络品牌活动策划
  • 东莞易宣网站建设公司怎么样域名注册服务网站
  • 汕头网站制作哪里好武汉seo认可搜点网络
  • 模板网站代理百度搜索引擎关键词优化
  • 麦三佰日文网站建设网站域名查询工具
  • 做视频播放网站 赚钱seo的中文含义是
  • 百度推广网站建设廊坊百度关键词优化
  • 网站建设前端和后端本溪seo优化
  • 深圳企业网站建设报价网络营销公司排名
  • 宁波seo入门教程百度seo霸屏软件
  • 程序员做情侣网站公司网站模板设计
  • 访问失效链接 如何删除 网站维护百度推广登录手机版
  • 什么样的口罩才具有防疫功能南京市网站seo整站优化
  • 老外把金文做的网站翻译叫什么电子营销主要做什么
  • 网站建设否定关键词搜索关键词
  • 网站建设的定位是什么意思nba最新排名
  • 无锡企业网站制作哪家比较好网站制作教程
  • 中小企业网站建设市场免费大数据查询平台