【发布时间】:2010-11-11 20:51:04
【问题描述】:
我刚刚编译了这段代码: 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;
}
}
它位于末尾,在std::cout<<"Client connected!\r\n\r\n"; 行之后。
我知道我从一个“非阻塞”示例中复制了这个,但我认为这段代码不应该做任何非阻塞的事情,但我的 for 循环正在疯狂地运行!
【问题讨论】:
-
你能粘贴你写的附加代码吗?
-
您是否在使用任何 WSAsync... 调用?
-
你有什么样的客户端连接到你的服务器?
-
@chrisaycock:我通过 php 连接到它。