选择模型整体思路:

  1、初始化套接字集合fdSocket,向套接字集合中添加监听套接字句柄。

  2、将fdSocket集合中的拷贝fdRead传递给select函数。当有事件发生时,select函数移除fdRead集合中没有未决I/O操作的套接字句柄,然后返回。

  3、比较原来的fdSocket集合与select处理过的fdRead集合,确定哪些套接字有未决I/O,并进一步处理这些I/O。(注:未决I/O指的是请求到达,未处理。)

  4、因为函数主体在死循环中,所以回到第二步继续进行选择处理。

  选择模型实现过程:

  1、创建监听套接字,并将其绑定到本地端口。

  2、初始化套接字集合fdSocket,向套接字集合中添加监听套接字句柄。

  3、进入While死循环。创建一个fdRead套接字集合,将fdSocket套接字集合拷贝给fdRead集合。

  4、for循环比较两个套接字集合:判断fdSocket套接字集合中的套接字是否在fdRead套接字集合中。

    1.如果一个套接字是监听套接字,就说明有新的连接到来,定义一个新的套接字,创建成功则将新套接字插入fdSocket集合中;

    2.如果一个套接字是通信套接字,创建缓冲区接受数据,有数据则打印,没有数据就关闭套接字并将其清空。

  选择模型的作用:

  使用select的好处是能够在单个线程内同时处理多个套接字,但是添加到fd_set结构中的套接字数量是有限制的默认情况下,最大值为64。也可自定义,但不会超过1024个。

posted on 2016-03-24 22:52  suvllian  阅读(165)  评论(0)    收藏  举报