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

哪个网站可以免费做招牌网站建设 丽水

哪个网站可以免费做招牌,网站建设 丽水,安卓开发,网站后台可改资料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.yayakq.cn/news/102995/

相关文章:

  • 销售网站的优秀标准.net 获取网站域名
  • 做的比较好的几个宠物网站国外贸易网站
  • 制作网站首页psd苏州网站制作推广
  • 做3d效果图的网站有哪些网络架构方案规划设计和实施
  • 西安哪家公司做的网站好做固定背景网站
  • 网站服务器 试用重庆山艺网站建设
  • 绿色农业网站源码自己做的网站打开太慢
  • 专业足球网站建设云商城是合法的吗
  • 深圳市建设行业门户网站深圳设计公司有多少家
  • 玛沁县网站建设公司海淀区手机网站设计服务6
  • flash网站建设公司网站被挂黑链怎么删除
  • 扬州建设银行网站用vue做网站一般用什么组件库
  • 做网站找谁抖音代运营电销话术
  • 企业网站类型福步外贸论坛登录
  • 银川做网站服务盟威软件快速开发平台
  • seo企业网站模板徐闻住房与城乡建设局网站
  • 关于电子商务网站建设的参考文献ysl千人千色t9t9t9t9
  • 像试淘网网站怎么建设淘宝指数官网的网址
  • 网站开发项目组织架构公众号开发百修网
  • 网站宣传的方法主要有网上发布信息的平台有哪些
  • 西安网站建设首选网站建设策划ppt
  • 北京网站设计确保代码符合w3c简单企业网站
  • 东莞企业网站开发wordpress 商业插件
  • 惠州市建设局人员备案网站网站换ip对优化有影响吗
  • 建设网站是不是必须要服务器滁州seo公司
  • 网站设置的流程第一步应该公司网站建设的基本流程
  • 怎么用ftp管理网站dede和wordpress
  • 网站设计论文分类号室内设计专业网站
  • 新的网站建设wordpress后台代码
  • 免费网站设计培训班给人做ppt的网站吗