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

买目录做网站百度官方免费下载

买目录做网站,百度官方免费下载,建设网站 xp,深圳建工集团股份有限公司待遇epoll是Linux下多路复用IO接口select/poll的增强版本#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率#xff0c;因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合#xff0… epoll是Linux下多路复用IO接口select/poll的增强版本它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合另一点原因就是获取事件的时候它无须遍历整个被侦听的描述符集只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。 目前epell是linux大规模并发网络程序中的热门首选模型。 epoll除了提供select/poll那种IO事件的电平触发Level Triggered外还提供了边沿触发Edge Triggered这就使得用户空间程序有可能缓存IO状态减少epoll_wait/epoll_pwait的调用提高应用程序效率。 可以使用cat命令查看一个进程可以打开的socket描述符上限。 cat /proc/sys/fs/file-max 如有需要可以通过修改配置文件的方式修改该上限值。 sudo vi /etc/security/limits.conf在文件尾部写入以下配置,soft软限制hard硬限制。如下图所示。* soft nofile 65536* hard nofile 100000 基础API 创建一个epoll句柄参数size用来告诉内核监听的文件描述符的个数跟内存大小有关。 #include sys/epoll.hint epoll_create(int size) size监听数目 控制某个epoll监控的文件描述符上的事件注册、修改、删除。 #include sys/epoll.hint epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)epfd 为epoll_creat的句柄op 表示动作用3个宏来表示EPOLL_CTL_ADD (注册新的fd到epfd)EPOLL_CTL_MOD (修改已经注册的fd的监听事件)EPOLL_CTL_DEL (从epfd删除一个fd)event 告诉内核需要监听的事件struct epoll_event {__uint32_t events; /* Epoll events */epoll_data_t data; /* User data variable */};typedef union epoll_data {void *ptr;int fd;uint32_t u32;uint64_t u64;} epoll_data_t;EPOLLIN 表示对应的文件描述符可以读包括对端SOCKET正常关闭EPOLLOUT 表示对应的文件描述符可以写EPOLLPRI 表示对应的文件描述符有紧急的数据可读这里应该表示有带外数据到来EPOLLERR 表示对应的文件描述符发生错误EPOLLHUP 表示对应的文件描述符被挂断EPOLLET 将EPOLL设为边缘触发(Edge Triggered)模式这是相对于水平触发(Level Triggered)而言的EPOLLONESHOT只监听一次事件当监听完这次事件之后如果还需要继续监听这个socket的话需要再次把这个socket加入到EPOLL队列里 等待所监控文件描述符上有事件的产生类似于select()调用。 #include sys/epoll.hint epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)events 用来存内核得到事件的集合maxevents 告之内核这个events有多大这个maxevents的值不能大于创建epoll_create()时的sizetimeout 是超时时间-1 阻塞0 立即返回非阻塞0 指定毫秒返回值 成功返回有多少文件描述符就绪时间到时返回0出错返回-1   server #include stdio.h #include stdlib.h #include string.h #include netinet/in.h #include arpa/inet.h #include sys/epoll.h #include errno.h #include wrap.h#define MAXLINE 80 #define SERV_PORT 6666 #define OPEN_MAX 1024int main(int argc, char *argv[]) {int i, j, maxi, listenfd, connfd, sockfd;int nready, efd, res;ssize_t n;char buf[MAXLINE], str[INET_ADDRSTRLEN];socklen_t clilen;int client[OPEN_MAX];struct sockaddr_in cliaddr, servaddr;struct epoll_event tep, ep[OPEN_MAX];listenfd Socket(AF_INET, SOCK_STREAM, 0);bzero(servaddr, sizeof(servaddr));servaddr.sin_family AF_INET;servaddr.sin_addr.s_addr htonl(INADDR_ANY);servaddr.sin_port htons(SERV_PORT);Bind(listenfd, (struct sockaddr *) servaddr, sizeof(servaddr));Listen(listenfd, 20);for (i 0; i OPEN_MAX; i)client[i] -1;maxi -1;efd epoll_create(OPEN_MAX);if (efd -1)perr_exit(epoll_create);tep.events EPOLLIN; tep.data.fd listenfd;res epoll_ctl(efd, EPOLL_CTL_ADD, listenfd, tep);if (res -1)perr_exit(epoll_ctl);while (1) {nready epoll_wait(efd, ep, OPEN_MAX, -1); /* 阻塞监听 */if (nready -1)perr_exit(epoll_wait);for (i 0; i nready; i) {if (!(ep[i].events EPOLLIN))continue;if (ep[i].data.fd listenfd) {clilen sizeof(cliaddr);connfd Accept(listenfd, (struct sockaddr *)cliaddr, clilen);printf(received from %s at PORT %d\n, inet_ntop(AF_INET, cliaddr.sin_addr, str, sizeof(str)), ntohs(cliaddr.sin_port));for (j 0; j OPEN_MAX; j) {if (client[j] 0) {client[j] connfd; /* save descriptor */break;}}if (j OPEN_MAX)perr_exit(too many clients);if (j maxi)maxi j; /* max index in client[] array */tep.events EPOLLIN; tep.data.fd connfd;res epoll_ctl(efd, EPOLL_CTL_ADD, connfd, tep);if (res -1)perr_exit(epoll_ctl);} else {sockfd ep[i].data.fd;n Read(sockfd, buf, MAXLINE);if (n 0) {for (j 0; j maxi; j) {if (client[j] sockfd) {client[j] -1;break;}}res epoll_ctl(efd, EPOLL_CTL_DEL, sockfd, NULL);if (res -1)perr_exit(epoll_ctl);Close(sockfd);printf(client[%d] closed connection\n, j);} else {for (j 0; j n; j)buf[j] toupper(buf[j]);Writen(sockfd, buf, n);}}}}close(listenfd);close(efd);return 0; } client /* client.c */ #include stdio.h #include string.h #include unistd.h #include netinet/in.h #include wrap.h#define MAXLINE 80 #define SERV_PORT 6666int main(int argc, char *argv[]) {struct sockaddr_in servaddr;char buf[MAXLINE];int sockfd, n;sockfd Socket(AF_INET, SOCK_STREAM, 0);bzero(servaddr, sizeof(servaddr));servaddr.sin_family AF_INET;inet_pton(AF_INET, 127.0.0.1, servaddr.sin_addr);servaddr.sin_port htons(SERV_PORT);Connect(sockfd, (struct sockaddr *)servaddr, sizeof(servaddr));while (fgets(buf, MAXLINE, stdin) ! NULL) {Write(sockfd, buf, strlen(buf));n Read(sockfd, buf, MAXLINE);if (n 0)printf(the other side has been closed.\n);elseWrite(STDOUT_FILENO, buf, n);}Close(sockfd);return 0; }   转载于:https://www.cnblogs.com/wanghao-boke/p/11425924.html
http://www.huolong8.cn/news/287845/

相关文章:

  • ui特效网站北京网站建设 和君
  • 做快消品的网站怎么样购买服务器建设网站
  • 域名会影响网站排名吗做空运货代常用网站
  • 做个企业网站的公司极路由 做网站
  • 镇江高端网站定制招聘网官方网站
  • 做自己的首席安全官的网站asp网站设置
  • 建大型网站需要多少钱汕头网站建设制作报价
  • 卓越高职院建设网站登封市城乡建设路网站
  • 成都wap网站建设wordpress token插件
  • 网站建设 动态添加内容在线制作图网站
  • 响水建设局网站做电商网站一般需要什么流程
  • 厦门外贸网站搭建餐饮网络推广有哪些渠道
  • 长春 美容 网站建设广州app开发服务
  • 响水企业做网站多少钱网页设计搭建网站
  • 福建漳州东山建设局网站网站做的图上传后字变得很模糊
  • 苏州网站建设企业全国高校校园网站联盟建设
  • wordpress安装后查看站点失败订阅号自定义可以做链接网站不
  • 电子商务网站建设与管理实务目前哪个城市又封了
  • 怎么在网上建网站啊做网站php语言用什么工具
  • 如何做发表文章的网站如果网站不备案
  • 深圳企业网站网站设计评级
  • 怎么在公司网站上安装百度商桥创建网页快捷键
  • wordpress导航站模版网站建设费可以计入办公费用么
  • 周末做兼职上什么网站找营销型网站建设制作
  • 免费舆情信息网站域名大全 二级域名
  • 网站模板兼容手机端建筑资料软件
  • 哈尔滨企业做网站网站基本建设
  • 网站前期准备工作电商网站前端开发
  • 网站浏览图片怎么做北京一个公司做网站认证
  • 做h5哪些网站好 知乎他达拉非片正确服用方法