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

 

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
  {
    // 进入相应的处理
  }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值