Winsock recv()不会阻止

joh*_*ohn 0 c++ winsock

我刚刚编译了这段代码:http: //www.win32developer.com/tutorial/winsock/winsock_tutorial_2.shtm

我添加了一些代码,因此它在无限循环中执行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;
  }
}
Run Code Online (Sandbox Code Playgroud)

它结束了,在线之后std::cout<<"Client connected!\r\n\r\n";.我知道我从一个"非阻塞"的例子中复制了这个,但我不认为这个代码应该做任何非阻塞的事情,但是,我的for循环运行得像疯了!

nat*_*han 5

recv默认情况下应该阻止,除非出现套接字错误或者您明确将套接字设置为非阻塞.务必检查错误的返回值.有关详细信息,请参阅有关recv的Microsoft软件MSDN文章.