您的位置:首页 > 产品设计 > UI/UE

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

2013-07-24 14:16 555 查看
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

{

// 进入相应的处理

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: