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

宝应县天宇建设网站seo高级教程

宝应县天宇建设网站,seo高级教程,前端2024年好找工作吗,闵行区做网站公司poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。 p…

        poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。 

        poll() 和 select() 同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。 

函数原型分析 

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

        fds:监听的文件描述符【数组

            struct pollfd {
                
                        int fd:    待监听的文件描述符
                
                        short events:    待监听的文件描述符对应的监听事件

                                                   取值:POLLIN、POLLOUT、POLLERR

                        short revnets:   传入时, 给0。如果满足对应事件的话,

                                                   返回 非0 -->POLLIN、POLLOUT、POLLERR
            }

        nfds: 监听数组的,实际有效监听个数。

        timeout:  > 0:  超时时长。单位:毫秒。

                         -1:    阻塞等待

                          0:  不阻塞

        返回值:返回满足对应监听事件的文件描述符总个数。

优缺点 

优点:
        自带数组结构。 可以将 监听事件集合 和 返回事件集合 分离。

        拓展 监听上限。 超出 1024限制。

缺点:
        不能跨平台。 Linux

        无法直接定位满足监听事件的文件描述符, 编码难度较大。

代码实例

/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <poll.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;ssize_t n;char buf[MAXLINE], str[INET_ADDRSTRLEN];socklen_t clilen;struct pollfd client[OPEN_MAX];struct sockaddr_in cliaddr, servaddr;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);client[0].fd = listenfd;client[0].events = POLLRDNORM; 					/* listenfd监听普通读事件 */for (i = 1; i < OPEN_MAX; i++)client[i].fd = -1; 							/* 用-1初始化client[]里剩下元素 */maxi = 0; 										/* client[]数组有效元素中最大元素下标 */for ( ; ; ) {nready = poll(client, maxi+1, -1); 			/* 阻塞 */if (client[0].revents & POLLRDNORM) { 		/* 有客户端链接请求 */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 (i = 1; i < OPEN_MAX; i++) {if (client[i].fd < 0) {client[i].fd = connfd; 	/* 找到client[]中空闲的位置,存放accept返回的connfd */break;}}if (i == OPEN_MAX)perr_exit("too many clients");client[i].events = POLLRDNORM; 		/* 设置刚刚返回的connfd,监控读事件 */if (i > maxi)maxi = i; 						/* 更新client[]中最大元素下标 */if (--nready <= 0)continue; 						/* 没有更多就绪事件时,继续回到poll阻塞 */}for (i = 1; i <= maxi; i++) { 			/* 检测client[] */if ((sockfd = client[i].fd) < 0)continue;if (client[i].revents & (POLLRDNORM | POLLERR)) {if ((n = Read(sockfd, buf, MAXLINE)) < 0) {if (errno == ECONNRESET) { /* 当收到 RST标志时 *//* connection reset by client */printf("client[%d] aborted connection\n", i);Close(sockfd);client[i].fd = -1;} else {perr_exit("read error");}} else if (n == 0) {/* connection closed by client */printf("client[%d] closed connection\n", i);Close(sockfd);client[i].fd = -1;} else {for (j = 0; j < n; j++)buf[j] = toupper(buf[j]);Writen(sockfd, buf, n);}if (--nready <= 0)break; 				/* no more readable descriptors */}}}return 0;
}

read 函数

read 函数返回值:
        > 0: 实际读到的字节数

        =0: socket中,表示对端关闭。close()

        -1:    如果 errno == EINTR   被异常终端。 需要重启。

        如果 errno == EAGIN 或 EWOULDBLOCK 以非阻塞方式读数据,但是没有数据。  需要,再次读。

        如果 errno == ECONNRESET  说明连接被 重置。 需要 close(),移除监听队列。

        错误。 

(了解)突破1024 文件描述符限制 

cat /proc/sys/fs/file-max   -- >  当前计算机所能打开的最大文件个数。 受硬件影响。

ulimit -a     -- > 当前用户下的进程,默认打开文件描述符个数。  缺省为 1024

修改:
                打开 sudo vi /etc/security/limits.conf, 写入:

                * soft nofile 65536 --> 设置默认值,可直接借助命令修改【注销用户,使其生效】

                * hard nofile 100000  --> 命令修改上限。

http://www.15wanjia.com/news/19261.html

相关文章:

  • 党支部网站建设友妙招链接
  • 老域名新网站推广腾讯域名注册官网
  • 哪一些网站可以开户做百度广告销售管理
  • 网站建设的图片百度无锡营销中心
  • 外国网站加速器免费的网络营销方式
  • 谷歌浏览器wordpress证书不安全网站优化网站
  • 站酷网免费素材图库官网品牌推广与传播方案
  • 做网站该读啥如何建立网站平台的步骤
  • gpu服务器租用价格引擎优化
  • 定制网站制作哪家好东莞网站建设哪家公司好
  • 电子商务网站建设与管理理解商品seo关键词优化
  • 直播网站如何做百度高级搜索引擎
  • 中国联通网站备案软文街怎么样
  • 网站建设公司整站源码市场监督管理局官网
  • 购物网站源码太原推广团队
  • 网站建设及运行情况介绍软文模板
  • 同城做鸭网站千峰培训出来好就业吗
  • 做一个网站得做多少个页面最近新闻事件
  • wordpress菜单设置中文河北seo网络推广
  • 用哪个软件做网站免费技能培训在哪里报名
  • 专业做域名的网站吗百度seo优化服务
  • 北京企业建站团队株洲专业seo优化
  • 丹东商城网站建设跨境电商培训机构哪个靠谱
  • 网站右侧二维码成免费crm软件有哪些优点
  • 免费网站建设资讯网络营销策划论文
  • 南昌专业做网站的aso优化
  • 南通专业做网站南宁seo优化
  • 河北智能网站建设bt种子bt天堂
  • 江门seo网站互联网广告平台代理
  • 网站开发 0755百度推广怎么登陆