GetQueuedCompletionStatus后不同返回值的通用处理流程

来源:互联网 发布:js 地图插件 编辑:程序博客网 时间:2024/05/20 05:24

 

v_bSuccess = GetQueuedCompletionStatus(
   m_stchComplePort,
   &v_dwNumberBytes,
   (LPDWORD)&v_dwNetKey,
   (LPOVERLAPPED*)&v_pOverLapped,
   INFINITE
  );

1、Server投递的Accept操作,AcceptEx里面的RecvDataLen参数不为0的话,表示等待客户端连接发送数据包才返回
//   如果投递成功,进入相应的操作
if(v_bSuccess && dwNumberBytes>0)
{
  // 进行相应的操作
  // to do.... 
  // 重新投递一个新的accept
}
else
{
  // 如果是返回失败,一般就是该Server Socket出问题了,直接断开服务端Socket连接
  if(!v_bSuccess)
  {
    closesocket(sListenSocket);
  }
  else 
  {
    // 客户端关闭了套接字,回收该句柄资源
    closesocket(sCltSocket);
  }
}

2、Server投递的Accept操作,AcceptEx的RecvDataLen参数为0,即接收到客户端连接立即返回
if(v_bSuccess)
{
  // 进行相应的操作
  // to do.... 
  // 重新投递一个新的accept
}
else
{
  // 如果是返回失败,一般就是该Server Socket出问题了,直接断开服务端Socket连接
}

3、Server投递Recv\Send返回
if(!v_bSuccess)
{
  // 如果是返回失败,一般就是该Server Socket出问题了,直接断开服务端Socket连接
}
else
{
  // 客户端断开连接
  if(0==v_dwNumberBytes)
  {
    // 客户端断开连接,回收该句柄资源
    closesocket(sCltSocket);
  }
  else
  {
    // 进入相应的处理
  }
}

4、Client投递Recv/Send操作返回
if(!v_bSuccess)
{
  // 如果是返回失败,一般就是该Server Socket出问题了,直接断开服务端Socket连接
}
else
{
  // 客户端断开连接
  if(0==v_dwNumberBytes)
  {
    // 远程服务端断开连接,回收该句柄资源
    closesocket(sCltSocket);
  }
  else
  {
    // 进入相应的处理
  }
}

 

原创粉丝点击