UDP并发服务器模型 二:select机制
来源:互联网 发布:高精度手机gps软件 编辑:程序博客网 时间:2024/06/05 16:44
上篇文章说了下 udp 并发模型。然后笔者也自己编写了一套代码,基本上能显示 udp 并发机制。大致原理参考:
http://blog.csdn.net/aa120515692/article/details/47294335
select机制能很好地提供多路IO功能。对于本套代码,已基本上能提供类似 select 的功能
主要函数接口:
void listen_head_init(struct list_head *head)初始化一个 链表头int listen_add(struct list_head *head, listen_t *listen)将要监听的 listen 添加到这个链表头recv_from_listen_head从链表中获取数据
示例:
//我们创建两个 listen_head struct list_head poll_head_1, poll_head_2; int main(int argc, char *argv[]) { int poll_num = 0; struct listen *_listen; /* 初始化socket */ sockfd = init_socket(); /* 开始监听这个socket. 运行最大的连接数为10 该函数类似于TCP协议中的 int listen(SOCKET sockfd, int backlog) */ server_listen(&sockfd, 10); /* 初始化这个poll 机制 */ listen_head_init(&poll_head_1); listen_head_init(&poll_head_2); while(1) { /* 获得一个连接。类似于TCP的 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); */ _listen = server_accept(); if(_listen == NULL){ continue; } printf("new client \r\n"); if(poll_num < 5) { /* 前面五个连接者添加到 poll_head_1 */ poll_num ++; listen_add(&poll_head_1, _listen); }else{ /* 添加到 poll_head_2 */ poll_num ++; listen_add(&poll_head_2, _listen); } } }
然后我们就可以从中两个 listen_head 中读取数据了
while(1) { /* 从 poll_head_1 中读取数据。 此时,前面五个 listen 被挂钩到这个 poll_head_1,所以这五个listen中任何一个有了数据 recv_from_listen_head 都会返回,而且将 _listen 指向这个 listen 这样,我们就可以知道是哪个listen有数据了 */ ret = recv_from_listen_head(poll_head_1, &_listen, (struct sockaddr *)&clientaddr, buf, 1204, -1); if(ret == -1) { printf("%p recv is err \r\n", _listen); }else{ printf("__ poll %p recv %d byte data is [%s]\r\n", _listen, ret, buf); if((ret = sendto(sockfd, buf, ret, 0, (struct sockaddr *)(&(_listen->addr)), sizeof(struct sockaddr))) == -1) { perror("sendto :"); } printf("sento [%s]\r\n", buf); } }
1 0
- UDP并发服务器模型 二:select机制
- UDP并发服务器模型 一
- (五十三)高并发服务器——多路IO转接机制Select模型
- 基于select模型的udp客户端实现超时机制
- TCP并发服务器模型(二)
- Select实现并发服务器
- select实现并发服务器
- 并发服务器select
- UDP-网络服务器模型
- 并发TCP服务器和并发UDP服务器
- select模型服务器代码
- Select模型服务器框架
- windows下并发I/O服务器模型对比(二)
- select 模型 实现并发 demo
- UDP并发服务器设计讨论
- 解决UDP服务器并发困难
- 并发服务器模型
- 并发服务器 典型模型
- android学习之路
- 【POJ 2151】Check the difficulty of problems
- 新大话2儿女养成之后之童工篇
- Android项目开发部可缺少的代码
- 智能硬件时代来临,开启你的创客之路!
- UDP并发服务器模型 二:select机制
- E- Refraction----(2015 NEUQ_ACM summer training #1)
- 在vs中配置VEGA应用时提示无法启动应用的解决办法
- js刷新页面方法大全
- willMoveToParentViewController和didMoveToParentViewController
- 【Python】【1】Python之——常用Python第三方库 简介
- ElasticSearch:Nginx可以给ElasticSearch集群带来什么福利?
- Object-C 设计模式
- Markdown语法练习