非阻塞的SelectRecv函数

int SelectRecv(int sockdf, unsigned char *data, int len,int mark)
{
  int retval;
  int flag=-1;
  fd_set rfds;
  struct timeval timeout;
  timeout.tv_sec=0;            
  timeout.tv_usec=2;
  FD_ZERO(&rfds);
  FD_SET(sockdf, &rfds);
  for(;;) {
    retval = select(0, &rfds, NULL, NULL, &timeout);
    if (retval == -1){
         printf("select() Failed!\n");
         break;
    }
    else if(FD_ISSET(sockdf, &rfds))
       {
          flag = recv(sockdf, data, len, 0);
          if(flag == -1)
             {
                printf("recv error!\n");
                break;
              }
          else
          {
              break;
          }             
        }
    }
  return flag;
}


SOCKET阻塞的recv与非阻塞 的recv接收速度差距很大
使用int SelectRecv(int sockdf, unsigned char *data, int len,int mark)

非阻塞recv,与直接使用recv的速度差的很多,在相同的环境下,SOCKET非阻塞recv狂慢,比阻塞的慢十分之一都不至,所以在实时性要求比较高的条件下,还是用阻塞方式比较好!

但是实际应用还是要以具体情况分析。

转载于:https://www.cnblogs.com/papam/archive/2009/08/24/1552909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值