Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104496
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 57
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-28 09:40
个人简介

静下心,不浮躁,方能得智慧

文章分类
文章存档

2015年(7)

2014年(12)

我的朋友

分类: LINUX

2015-10-17 19:14:49

1、listen_fd = socket();

2、配置服务器IP

3、Bind(listen_fd , (SA *)&server,  sizeof(serveradr)); 绑定本机与服务器;

4、设置监听客户端个数: listen(listen_fd, 10);

5、初始化一个Pollfd 类型的结构体数组用于保存client里生成的文件描述符的操作;

6、把数组中第一个元素设置为监听描述符: client[0].fd = listen_fd;

7、把测试条件设置为数据可读: client[0].events = POLLIN;

8、把数组中其他文件描述符设置为不可用,一般复位 -1;遍历赋值;

9、初始化一个最大文件描述符max_fd0,用于遍历条件;

10、循环接受并发请求,开启while死循环;

11、调用poll(client,  max _fd  + 1,  -1  ) //将进程阻塞,并保存有客户时的客户数;

12、判断client[0]的事件返回是否为POLLIN数据

13、如果是表示将有新的连接进来,已经被监听到。

处理:

1、调用connect_fd = accept()函数建立连接,

   2、遍历client数组查找一个可用的文件描述符保存connect_fd;

3、如果没有空间了,表示已经满了,通知不能再处理客户请求;

4、由于生成文件描述符是当前可用最小的,故需要处理最大文件描述符    ifi > max ) max_fd = i;

5、判断监听客户返回数是否正确,如果-1之后不大于0,则表示监听失

败,直接返回到11步骤;

14、如果不是表示是已有的连接请求,那么根据客户请求文件描述符,做相应处理;

处理:

1、分析现有的文件描述符集(数组client)注意从1开始遍历到max_fd;

2、各种if判断读fd / fd / ......

3、分析客户返回数-1之后是否仍不小于0,否则直接返回、调出遍历条 件;

15、循环结束;

阅读(1550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~