int SelectRecv(int sockdf, unsigned char *data, int len,int mark)
{
int retval;
int flag=-1;
fd_set rfds;
struct timeval timeout;
{
int retval;
int flag=-1;
fd_set rfds;
struct timeval timeout;
timeout.tv_sec=0;
timeout.tv_usec=2;
timeout.tv_usec=2;
FD_ZERO(&rfds);
FD_SET(sockdf, &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;
}
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)
但是实际应用还是要以具体情况分析。