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

广东平台网站建设找哪家/广州seo站内优化

广东平台网站建设找哪家,广州seo站内优化,网站设计任务书,建立企业网站几天1 Epoll编程要点 1.1 连接建立 服务器接收客户端连接: 接收过程分为两个步骤首先是服务器注册监听listenfd;第二步是服务接收客户端连接clientfd;所有的socket都是利用epoll_ctl交由epoll进行管理 epfd epoll_create(10); // 1. 注册监听…

1 Epoll编程要点

1.1 连接建立

服务器接收客户端连接:

  • 接收过程分为两个步骤首先是服务器注册监听listenfd;
  • 第二步是服务接收客户端连接clientfd;
  • 所有的socket都是利用epoll_ctl交由epoll进行管理
 epfd = epoll_create(10);
// 1. 注册监听 listenfd 的读事件
struct epoll_event ev = {0, {0}};
ev.events |= EPOLLIN;
epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd, &ev);
// 2. 当触发 listenfd 的读事件,调用 accept 接收新的连接
int clientfd = accept(listenfd, (struct sockaddr*)&client_addr, &len));
struct epoll_event ev = {0, {0}};
ev.events |= EPOLLIN;
epoll_ctl(epfd, EPOLL_CTL_ADD, clientfd, &ev);

客户端连接服务器:

  • 客户端连接服务器成功需要客户端发送ack成功才能成功,即写事件EPOLLOUT被触发。
 epfd = epoll_create(10);
//创建客户端socket并连接服务器
int connectfd = socket(AF_INET, SOCK_STREAM, 0);
connect(connectfd, (struct sockaddr *)&addr, sizeof(addr));
// 2. 注册监听 connectfd 的写事件
struct epoll_event ev = {0, {0}};
ev.events |= EPOLLOUT;
epoll_ctl(epfd, EPOLL_CTL_ADD, connectfd, &ev);
// 3. 当 connectfd 写事件被触发,连接建立成功
if (status == CONNECTING&& e->events & EPOLLOUT) {status == CONNECTED;
}

1.2 连接断开

  • 只有两种模式一种是EPOLLRDHUP读端关闭;
  • 另一种是EPOLLHUP读写端都关闭
if (e->events & EPOLLRDHUP) {// 读端关闭read_close(fd);//可以进行写相关操作,之后close(fd);
}
if (e->events & EPOLLHUP) {// 读写端都关闭close(fd);
}

被动断开:

  • 对于需要进行半连接操作的,可以利用读端或者写端关闭;操作对于的写端和读端
  • read返回值为0 为读端被动关闭;
  • write返回值为-1 同时errno数值为EPIPE为写端被动关闭;
//接收端读端被动关闭;发送端写端关闭。
int n = read(fd, buf, size);
if (n == 0) {read_close(fd);//可以进行写相关操作,之后close(fd);
}
//被动写端关闭
int n = write(fd, buf, size);
if (n == -1 && errno == EPIPE) {write_close(fd);//可以进行读相关操作,之后close(fd);
}

1.3 数据到达

  • 消息到达需要忽略EINTR系统中断错误;
  • 消息到达需要忽略EWOULDBLOCK接收缓冲区为空的错误,当没有数据需要退出循环读数据;
  • 其他错误需要:调用close关闭连接
  • 数据到达对于水平触发和边沿触发存在差异需要分别考虑
while(1)
{int n = read(fd, buf, size);if (n < 0) { // n == -1if (errno == EINTR)continue;if(errno == EWOULDBLOCK)break;close(fd);} else if (n == 0) {close(fd);} else {// 处理接收数据}
}

1.4 数据发送完毕

  • EINTR系统中断直接返回;等待下一次触发写;
  • EWOULDBLOCK写缓冲区满返回;写失败需要再次添加写事件等待下一次可写触发。
  • wirte写完数据后需要将写事件删除。防止一直触发可写事件。
  • 数据发送对于水平触发和边沿触发存在差异需要分别考虑
while(1)
{int n = write(fd, buf, size);if (n == -1) {if (errno == EINTR  {continue;}epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL);if (errno == EWOULDBLOCK) {struct epoll_event ev = {0, {0}};ev.events = EPOLLOUT;epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev);break;}close(fd);}else if (n > 0) {epoll_ctl(epfd, EPOLL_CTL_DEL, fd, NULL);}
}

1.5 epoll事件处理

  • epoll_wait设置的MAX_EPOLL_LENGTH大小是就绪队列的大小,决定的是单次可以接收的最大就绪事件,对于整体性能影响不大;
  • 最后超时事件可以根据业务设置
while (1) {int nready = epoll_wait(re->epfd, events, MAX_EPOLL_LENGTH, 1000);if (nready < 0) {printf("epoll_wait error, exit\n");continue;}//事件处理
}
http://www.jmfq.cn/news/5267845.html

相关文章:

  • web程序设计网站开发工具/制作网站费用
  • 用win2008做网站/今日国内重大新闻事件
  • wordpress电影模板下载/如何将网站的关键词排名优化
  • iis6 网站无法访问/公司网站
  • 烟台做网站的公司/游戏推广员好做吗
  • wordpress模板 更换/seo刷关键词排名免费
  • 石家庄市最新公告/苏州整站优化
  • 吉林seo基础知识/上首页seo
  • 网站建设费用:做个网站要多少钱?/影视剪辑培训机构排名
  • 自己做网站能宣传自己的产品吗/网络推广员为什么做不长
  • 北京建设网站的公司兴田德润优惠/seo 优化顾问
  • 营销型网站 开源程序/大数据营销系统软件
  • 做美女网站挣钱/百度首页关键词推广
  • 兰州企业做网站/软文写作服务
  • 海南智能网站建设公司/外贸独立站推广
  • 网页的制作教案/成都网站seo厂家
  • 做公司网站需要准备什么/怎么有自己的网站
  • 重庆金融网站建设/搜索引擎优化心得体会
  • 网站制作团队分工/网站seo价格
  • 深圳有哪些网站是做餐饮沙龙的/关键词优化公司排名榜
  • 做电影网站犯罪吗/百度灰色词排名代发
  • 长沙做网站kaodezhu/seo手机关键词网址
  • 建设百度网站/seo费用
  • 上海高端工作室网站/网络推广公司可不可靠
  • 建设银行网站怎么设置转账额度/产品运营主要做什么
  • 网站手机站怎么做的/代刷网站推广
  • 长沙网站制作费用/河源新闻最新消息
  • 广西网站建设价格/app推广在哪里可以接单
  • wordpress新建页面不能保存路径/贵州快速整站优化
  • 泊头做网站的/百度竞价推广效果怎么样