当我正在使用完成端口的时候,如何使用关闭一个端口假设以问答方式进行工作。当我receive 一些数据以后。 我可能要send 一些数据出去,同时再次调用receive
那么一个端口 就有2个部分在完成端口里面了。 此时,我的系统发出了命令,强制要求断掉某些
socket , 那么我应该怎么断? 平时 我靠 GetQueuedCompletionStatus 来获取 // 获取队列中iocp中的状态
if (GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,
(LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIoData, INFINITE) == 0)
当 BytesTransferred ==0 我知道对方断了,或者在receive 返回后,可以close掉,
但现在的情况是 send receive 也许并未返回呢。正被挂起呢
那么一个端口 就有2个部分在完成端口里面了。 此时,我的系统发出了命令,强制要求断掉某些
socket , 那么我应该怎么断? 平时 我靠 GetQueuedCompletionStatus 来获取 // 获取队列中iocp中的状态
if (GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,
(LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIoData, INFINITE) == 0)
当 BytesTransferred ==0 我知道对方断了,或者在receive 返回后,可以close掉,
但现在的情况是 send receive 也许并未返回呢。正被挂起呢
超时的话,我想让系统无论是send 还是recieve 30秒内一定要告诉我,
建立完成端口 有2个地方 第一个是 一开始if ((CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)) == NULL)
{
printf( "CreateIoCompletionPort failed with error: %d\n", GetLastError());
return;
}第二个是 当有新连接连进来以后
if (CreateIoCompletionPort((HANDLE) Accept, CompletionPort, (DWORD) PerHandleData,
0) == NULL)
{
printf("CreateIoCompletionPort failed with error %d\n", GetLastError());
return;
}我的超时是否加在第二个上面?如果成功了,是否 GetQueuedCompletionStatus 的时候30秒内就一定有反应?
这样设定主要是为了提高系统的相应度
不过我确实不是很在乎分数的。以前我都是上chinaunix的,很少上csdn的,要是为了分数,混几颗 猩猩 因该没问题的吧。
楼上哥们在那里作的?
break;if(!bSuccess) //出错,包括异常断开
{
Remove(lpConnCtx);
continue;
}if(bSuccess&&(dwIOSize==0) //正常断开
{
Remove(lpConnCtx);
continue;
}