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狂慢,比阻塞的慢十分之一都不至,所以在实时性要求比较高的条件下,还是用阻塞方式比较好!

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

相关文章:

  • 2022-02-07
  • 2021-12-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2021-05-18
猜你喜欢
  • 2022-12-23
  • 2023-03-19
  • 2021-11-13
  • 2021-11-11
  • 2021-07-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案