TClientSocket怎样正确的关闭与TServerSocket的连接?
因为客户程序要求和服务器断开后能够自动重连,所以我专门有一个线程来保证与服务器的连接,就是一个循环,检查连接标志,如果断开,就用OPEN方法打开SOCKET连接。但是,如果长时间不能连接到服务器,就会产生异常,“Windows socket error: 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。 (10055), on API 'connect' ”,代码如下:
void __fastcall TResumeConnectThread::Connect()
{
//TODO: Add your source code here
static int i = 0;
while(!fmFundMonitor->bExit )
{
if (!fmFundMonitor->IsConnected)
{
if (fmFundMonitor->CommClientSocket->Active)
{
fmFundMonitor->CommClientSocket->Socket->Close();
fmFundMonitor->CommClientSocket->Active = false;
}
fmFundMonitor->CommClientSocket->ClientType =ctNonBlocking;
fmFundMonitor->CommClientSocket->Host=fmFundMonitor->m_strServer;
fmFundMonitor->CommClientSocket->Port = fmFundMonitor->m_nPort;
fmFundMonitor->CommClientSocket->Active = true;
}
Sleep(500);
i++;
if (i == 3)
{
Sleep(6000*2);
i = 0;
}
}
}