在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
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狂慢,比阻塞的慢十分之一都不至,所以在实时性要求比较高的条件下,还是用阻塞方式比较好!

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

posted on 2009-08-24 15:01  palam  阅读(609)  评论(0编辑  收藏  举报