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

网络科技有限公司seo won jin

网络科技有限公司,seo won jin,wordpress网站图片迁移,做刷网站怎么赚钱https://blog.csdn.net/men_wen/article/details/53456474Linux网络编程—I/O复用模型之poll 1.函数poll poll系统调用和select类似#xff0c;也是在指定时间内轮询一定数量的文件描述符#xff0c;以测试其中是否有就绪者。 #include poll.hint poll(struct pollfd…https://blog.csdn.net/men_wen/article/details/53456474Linux网络编程—I/O复用模型之poll 1.函数poll poll系统调用和select类似也是在指定时间内轮询一定数量的文件描述符以测试其中是否有就绪者。 #include poll.hint poll(struct pollfd *fds, nfds_t nfds, int timeout); //返回值若成功返回就绪的描述符个数若超时则为0若出错则为-1 fds是指向一个pollfd结构第一个元素的指针。每一个元素都是pollfd结构类型用于测试某个给定描述符fd的条件 struct pollfd {int fd; /* file descriptor */short events; /* requested events */short revents; /* returned events */ }; 要测试的条件在events中指定函数相应的revents成员返回该描述符的状态一个为调用值一个为返回结果这与select的传入传出参数不同。 events和revents可以设置以下常量的一个或多个的按位或结果 POLLIN //普通或带外优先数据可读,即POLLRDNORM | POLLRDBAND POLLRDNORM //数据可读 POLLRDBAND //优先级带数据可读 POLLPRI //高优先级可读数据 POLLOUT //普通或带外数据可写 POLLWRNORM //数据可写 POLLWRBAND //优先级带数据可写 //下面三个revents不包含 POLLERR //发生错误 POLLHUP //发生挂起 POLLNVAL //描述字不是一个打开的文件 out指定poll函数返回前等待多长时间它是一个指定应等待毫秒数的正值。 |timeout值|说明| |-|-| |-1|永远等待| |0|立即返回不阻塞进程| |0|等待指定数目的毫秒数| nfds 是监控数组中有多少文件描述符需要被监控 如果我们不关心某个特定的描述符那么可以把与它对应的pollfd结构的fd成员设置为一个负值。poll函数会忽略这样的pollfd结构的events成员返回时将其revents成员的值置为0。 select模型最多可以创建一个1024个文件描述符大小的集合这是因为受到fd_set的固定数据类型的限制而poll则没有这样的问题因为分配一个pollfd结构的数组并把数组中的元素通知内核称为调用者的责任。但是poll模型任然使用的是轮询模型效率比较低下。 2. poll模型实现 2.1 服务器端 #include wrap.h #include poll.h #include limits.h #include sys/stropts.h#define MAXLINE 1024 #define INFTIM -1 #define OPEN_MAX 3000 int main(int argc, char *argv[]) {int i, maxi, listenfd, connfd, sockfd;int nready;ssize_t n;char buf[MAXLINE];socklen_t clilen;struct pollfd client[OPEN_MAX];struct sockaddr_in clientaddr;listenfd start_ser(argv[1], argv[2]);//监听文件描述符 该函数参考selectclient[0].fd listenfd;//将监听文件描述符加入pollfd数组中client[0].events POLLIN;//设置为输入可读for(i 1; i OPEN_MAX; i){//初始化结构体数组client[i].fd -1;}maxi 0;while(1){nready poll(client, maxi1, INFTIM); //阻塞等待注册时间发生if(client[0].revents POLLIN){//当监听文件描述符响应有新连接请求clilen sizeof(clientaddr);connfd Accept(listenfd, (struct sockaddr *)clientaddr, clilen);//接受新客户for(i 1; i OPEN_MAX; i){if(client[i].fd 0){client[i].fd connfd; //把新客户的文件描述符加入数组break;}}if(i OPEN_MAX){ //连接新客户上限Close(connfd);perr_exit(too many clients);}client[i].events POLLIN; //新客户端的处理事件if(i maxi){maxi i; //更新最大值}if(--nready 0){ //没有可读的描述符跳过本次循环continue;}}for(i 1; i maxi; i){ //请求所有客户端的数据if((sockfd client[i].fd) 0){continue;}if(client[i].revents POLLIN){ //POLLIN事件发生memset(buf, \0, MAXLINE);if((n Read(sockfd, buf, MAXLINE-1)) 0){if(errno ECONNRESET){ //当客户端发送resetClose(sockfd);client[i].fd -1;}else{perr_exit(read err);}}else if(n 0){Close(sockfd);client[i].fd -1;}else{printf(client : %s\n, buf);}if(--nready 0){ //没有可读的描述符跳过本次循环break;}}}}Close(connfd);Close(listenfd);return 0; }2.2客户端 #include wrap.hint main(int argc, char *argv[]) {struct sockaddr_in serveraddr;int connfd;connfd Socket(AF_INET, SOCK_STREAM, 0);bzero(serveraddr, sizeof(serveraddr));serveraddr.sin_family AF_INET;serveraddr.sin_port htons(atoi(argv[2]));inet_pton(AF_INET, argv[1], serveraddr.sin_addr);Connect(connfd, (struct sockaddr *)serveraddr, sizeof(serveraddr));char buf[1024];while((fgets(buf, 1024, stdin)) ! NULL){Write(connfd, buf, strlen(buf));}Close(connfd);return 0; }2.3程序测试结果
http://www.zqtcl.cn/news/75538/

相关文章:

  • 网站建设违约责任条款网站建设费属于宣传费吗
  • 代做标书网站做网站后要回源码有何用
  • 建设网站教程论坛优化大师软件大全
  • 网站建设的可研设计报告网站建设项目分析
  • 个人建站哪类站赚钱网站开发模式有什么
  • 建设银行啦卡信用网站网站内容建设需要哪些策略呢
  • 做网站运营有前景么dw可以用来做网站吗
  • 电子商务类网站wordpress 分类目录 高亮
  • 功能性的网站归档系统如何创建个人网站模板
  • 做网站如何赚钱知乎负责网站建设
  • 在线动画手机网站模板下载苏州百度推广排名
  • 内江做网站的公司域名买完了网站建设
  • 建设手机版网站阿里网站建设需要准备什么软件
  • 舟山建设工程信息网站万户网络科技有限公司怎么样
  • 商城网站源码免费哪个厂家的logo品牌设计
  • 在线网站做情侣头像游戏公司有哪些
  • 公司网站建设企划书专门查大学的网站
  • wordpress案例站点网盟推广有哪些
  • 绵阳 网站设计站长工具seo综合查询外部链接数量
  • 电脑系统做的好的网站好铁岭网络推广网站建设
  • 简单的网站开发百度网盘登录
  • 灌南县建设局网站小程序名称大全
  • 外贸网站模板外贸网站建设做音乐网站建设的开发平台
  • 网站流量超限什么意思南通开发区:高质量发展
  • 我也来做外国网站购物郑州七彩网站建设公司 评论
  • 网站收录排名做微信的网站叫什么米
  • 2017年做啥网站致富企业网站备案需要什么资料
  • python运维网站开发专业的网站建设排名
  • 网站建设主要考虑哪些因素资源网站模板下载
  • 海南四定网站开发wordpress文本编辑器按钮