读书人

非阻塞select recv数据这样慢

发布时间: 2013-11-21 23:38:25 作者: rapoo

非阻塞select recv数据这么慢?
本帖最后由 u012024502 于 2013-11-01 19:51:29 编辑 while (true)
{
FD_ZERO(&Rfd);
FD_ZERO(&Wfd);
FD_SET(ClientSocket,&Rfd);
FD_SET(ClientSocket,&Wfd);
Ret=select(0,&Rfd,&Wfd,NULL,&_timeout);
if (Ret<0)
{
printf("error\n");
break;
}
else if(!Ret)
{
printf("time over\n");
break;
}
else if(FD_ISSET(ClientSocket,&Wfd))
{
if (i==0)
{
SendRet=send(ClientSocket,"GET / HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n",strlen("GET / HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n"),0);
if(SendRet==SOCKET_ERROR)
{
printf("send failed\n");
break;
}
printf("send success1\n");
i++;
Sleep(1);
}
else if (i==1)
{
SendRet=send(ClientSocket,"GET /JS/jquery-142min.js HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n",strlen("GET /JS/jquery-142min.js HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n"),0);
if(SendRet==SOCKET_ERROR)
{
printf("send failed\n");
break;
}
i++;
printf("send success\n");
}
}
else if(FD_ISSET(ClientSocket,&Rfd))
{
while(true)
{
int recvnum=0;
recvnum=recv(ClientSocket,RecvBuff,10023,0);
if (recvnum<=0)
{
break;
}
else
{
RecvBuff[recvnum]=0;
int i=0;
while (i<recvnum)
{
printf("%c",RecvBuff[i]);
i++;
}
}
}
Sleep(1);
}
}

都好几分钟了 前面还以为是网络问题 select 是内核来判断哪个套接字可以写读 是么? 我的程序设置断点一直进入发送的函数。不是应该协议栈推送数据来了 。就不可读 应该写了么?
为什么我变化下FD_isset 的位子就可以了? 求详细解释下 用法。

select socket
[解决办法]


while (true)
{
FD_ZERO(&Rfd);
FD_ZERO(&Wfd);
FD_SET(ClientSocket,&Rfd);
FD_SET(ClientSocket,&Wfd);
Ret=select(0,&Rfd,&Wfd,NULL,&_timeout);
if (Ret<0)
{
printf("error\n");
break;
}
else if(!Ret)
{
printf("time over\n");
break;
}
else if(FD_ISSET(ClientSocket,&Wfd))
{
if (i==0)
{
SendRet=send(ClientSocket,"GET / HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n",strlen("GET / HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n"),0);
if(SendRet==SOCKET_ERROR)
{
printf("send failed\n");
break;
}
printf("send success1\n");
i++;
Sleep(1);
}
else if (i==1)
{
SendRet=send(ClientSocket,"GET /JS/jquery-142min.js HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n",strlen("GET /JS/jquery-142min.js HTTP/1.1\r\nHost: jwc.jxnu.edu.cn\r\nConnection: Keep-Alive\r\n\r\n"),0);
if(SendRet==SOCKET_ERROR)
{
printf("send failed\n");
break;
}
i++;
printf("send success\n");
}
}
else if(FD_ISSET(ClientSocket,&Rfd))
{
while(true)
{
int recvnum=0;
recvnum=recv(ClientSocket,RecvBuff,10023,0);
if (recvnum<=0)
{
break;
}
else
{
RecvBuff[recvnum]=0;
int i=0;
while (i<recvnum)
{
printf("%c",RecvBuff[i]);
i++;
}
}
}
Sleep(1);
}
}

读书人网 >C++

热点推荐