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

视频分享网站怎么做合肥品牌seo

视频分享网站怎么做,合肥品牌seo,网页生成二维码生成器,生鲜超市店面设计一、为什么要用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/75711.html

相关文章:

  • 企业网站运营方案免费搜索引擎入口
  • 寻找做网站的合作伙伴北京优化关键词排名seo
  • 怎么做网站加载动画seo刷关键词排名优化
  • 余姚网站建设哪家好武汉百度推广开户
  • 网站资讯创作seo网站推广
  • 微网站建设方式南昌seo快速排名
  • wordpress炫酷博客seo诊断分析
  • 先做亚马逊网站怎么操作全国人大常委会副委员长
  • 建设银行企业网站失败微指数查询入口
  • 嘉善县科正建设网站郑州厉害的seo优化顾问
  • 西宁微网站建设多少钱免费使用seo软件
  • wordpress微信群大全吉林关键词排名优化软件
  • 国内知名的网站建设公司有哪些搜狗推广登陆
  • 网站开发涉及技术网络平台推广广告费用
  • 网站制作需要学多久合肥网站优化平台
  • 深圳沙头网站建设一键生成app制作器
  • 网站怎么创建自己的网站百度seo优化哪家好
  • 网站建设开发方式包括一l丫企业全网推广公司
  • 做技术类网站赚钱吗优化 英语
  • 做yield网站多少钱深圳抖音推广公司
  • 广东企业网站建设百度推广的五大优势
  • 广州网站建设88关键词优化seo优化排名
  • 个人做视频网站seo网站推广多少钱
  • 如何建立自己的免费网站福州模板建站哪家好
  • 义乌义亭招工做网站养猪工作aso应用商店优化原因
  • 建设微网站平台引流推广平台
  • 武汉企业网站推广报价百度店铺怎么开通
  • dw制作班级网站培训机构最新消息
  • 亳州网站制作公司广州网站建设公司
  • 国外视频模板网站e合肥网络推广营销