也问一个API + SOCKET 阻塞超时处理的问题
服务器端线程代码如下:
void __fastcall TCommunication::Execute()
{
char buf[4096];
int nSize=0;
int i = 0;
while(1)
{
nSize = recv(m_AcceptSocket, (char FAR*)buf, 4096, 0);//问题1
if(nSize>0)
{
buf[nSize] = '\0';
//Display
PSTNForm->Memo1->Lines->Add("Received Length:" + String(nSize));
PSTNForm->Memo1->Lines->Add("Received:" + StrPas(buf));
//Deliver
::Sleep(100);
send(m_AcceptSocket, buf, nSize, 0);
}
else
{ //问题2
i++;
if (10 < i)
{
break;
}
}
}
}
问题1:
nSize = recv(m_AcceptSocket, (char FAR*)buf, 4096, 0);
这句,如果没有数据接收到那么 recv 将一直等下去,是吗?
如果我想设定一个超时处理应该怎么做呢?
问题2:
为什么要加这个循环?
防止误操作吗?
谢谢!!