select

winsock中select的作用

 1.可以读取的sockets.当这些socket被返回时,在这些socket上执行recv/accept等操作不会产生阻塞;

2.可以写入的sockets.当这些socket被返回时,在这些socket上执行send等不会产生阻塞;

3.返回错误的sockets.

 

同时和select配对使用的还有:

FD_CLR(s, *set)  //从set中删除套接字s

FD_ISSET(s, *set) //检查s是否set集合的一名成员;答案是肯定的,则返回TRUE

FD_SET(s, *set) //将套接字s加入集合set

FD_ZERO(*set)    //将set初始化成空集合

 

code:

SOCKET  s;

fd_set     fdread;

int     ret;

while(TRUE)

{

  FD_ZERO(&fdread);

  FD_SET(s, &fdread);

  if((ret=select(0, &fdread, NULL, NULL, NULL))

  {

    //Error condition

  }

  if(ret>0)

  {

    if(FD_ISSET(s, &fdread))

    {

      //a read event has occurred on socket s

    }

  }

}

 

//select原型

int   select(

  int   nfds,       //被忽略,为保持与早期的Berkeley套接字应用程序的兼容

  fd_set  FAR* readfds,  //检查可读性

  fd_set  FAR* writefds, //检查可写性

  fd_set  FAR*exceptfds, //例外数据

  const  struct timeval  FAR* timeout

   );

//readfds集合包括符合下述任何一条件的套接字:

1.有数据读入    2.连接已经关闭,重设或中止

3.假如已调用了listen,而且一个连接正在建立,那么accept函数调用会成功

 

//exceptfds集合包括符合下述任何一个条件的套接字

1.假如已完成了对一个非锁定连接调用的处理,连接尝试就会失败

2.有带外数据可供读取

转载于:https://www.cnblogs.com/timekongkong/archive/2010/04/28/1722562.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值