我刚才编译此代码: http://www.win32developer.com/tutorial/winsock/winsock_tutorial_2.shtm的Winsock的recv()不阻止
我增加了一些代码,这样它的recv(),在一个无限循环。我的问题是,如果没有数据要读取,它仍然不会阻止。
我完全错了,如果我想的recv应该在我的情况下阻止?
我已经添加的代码是:
for(;;)
{
char buffer[1000];
memset(buffer,0,999);
int inDataLength = recv(Socket,buffer,1000,0);
int nError=WSAGetLastError();
if(nError!=WSAEWOULDBLOCK&&nError!=0)
{
std::cout<<"Winsock error code: "<<nError<<"\r\n";
std::cout<<"Client disconnected!\r\n";
// Shutdown our socket
shutdown(Socket,SD_SEND);
// Close our socket entirely
closesocket(Socket);
break;
}
}
它是在结束时,将std::cout<<"Client connected!\r\n\r\n";
行之后。 我知道我从“非阻塞”的例子中复制了这个,但我不认为这个代码应该做任何非阻塞的事情,但是,我的for循环像疯了一样运行!
你能粘贴你写的附加代码吗? – chrisaycock 2010-11-11 20:56:54
您是否使用任何WSAsync ...调用? – Rob 2010-11-11 21:15:52
你有什么样的客户端连接到你的服务器? – chrisaycock 2010-11-11 21:22:17