Select模型原理

本文介绍了Select模型的原理,包括其在套接字管理中的作用,防止应用程序因尝试从无数据的套接字接收而陷入阻塞状态。详细解释了select函数的参数和返回值,以及FD_SET等宏的操作。还探讨了Select模型在服务器中的应用,如创建监听套接字、工作者线程,并处理并发连接限制。最后提到了Select模型的效率问题和如何通过分段轮询来扩展连接数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Select模型原理

利用select函数,判断套接字上是否存在数据,或者能否向一个套接字写入数据。目的是防止应用程序在套接字处于锁定模式时,调用recv(或send)从没有数据的套接字上接收数据,被迫进入阻塞状态。

 

select参数和返回值意义如下:

int select (

 IN int nfds,                           //0,无意义

 IN OUT fd_set* readfds,      //检查可读性

 IN OUT fd_set* writefds,     //检查可写性

 IN OUT fd_set* exceptfds,  //例外数据

 IN const struct timeval* timeout);    //函数的返回时间

 

struct  timeval {

        long    tv_sec;        //秒

        long    tv_usec;     //毫秒

};

select返回fd_set中可用的套接字个数。

 

fd_set是一个SOCKET队列,以下宏可以对该队列进行操作:

FD_CLR( s, *set) 从队列set删除句柄s;

FD_ISSET( s, *set) 检查句柄s是否存在与队列set中;

FD_SET( s, *set )把句柄s添加到队列set中;

FD_ZERO( *set ) 把set队列初始化成空队列.

 

Select工作流程

1:用FD_ZERO宏来初始化我们感兴趣的fd_set。

也就是select函数的第二三四个参数。

2:用FD_SET宏来将套接字句柄分配给相应的fd_set。

如果想要

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值