我在使用一个send发送一个大的数据的时候,系统会对我的窗口发送一个FD_READ消息,因为数据很大所以我一次recv无法全部取出,所以我使用下面的代码。
int err = recv(socket,(char*)p,size,0);
while(err != size)
{
int temp = recv(socket,(char*)(p+err),size-err,0);
err += temp;
}
我跟踪调试的时候运行的很好,但是非调试使用就会出问题,我查询了一下文档,MSDN上说在FD_READ里只能使用一个recv,那么我应该怎么办呢?
int err = recv(socket,(char*)p,size,0);
while(err != size)
{
int temp = recv(socket,(char*)(p+err),size-err,0);
err += temp;
}
我跟踪调试的时候运行的很好,但是非调试使用就会出问题,我查询了一下文档,MSDN上说在FD_READ里只能使用一个recv,那么我应该怎么办呢?
程序会死在那里,cpu马上就100%,我找了一下原因
FD_READ
跟
recvfrom
发生了死循环
如何解决?
跟
recvfrom
发生了死循环
---------------------察看一下收到的数据啊,不会死循环吧。没有设MSG_PEEK吧 ?
while(err != size)
{
int temp = recv(socket,(char*)(p+err),size-err,0);
err += temp;
}------------------------------------
不要这样使用,否则你会死很掺的。
肯定死循环啦
看我的: int err = recv(socket,(char*)p,1000,0);
while(err == 1000)
{
int err = recv(socket,(char*)p,1000,0);
}
100KByte/s,而且cpu<10%,你自己用异步,做不到吧??