选择模型整体思路:
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个。
    欢迎关注我的Github:https://github.com/suvllian
 
                     
                    
                 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号