void CALLBACK RecvCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) { ClientSession* fromClient = static_cast<OverlappedIO*>(lpOverlapped)->mObject; fromClient->DecRefCount(); if (!fromClient->IsConnected()) return; /// 에러 발생시 해당 세션 종료 if (dwError || cbTransferred == 0) { fromClient->Disconnect(); return; } /// 받은 데이터 처리 fromClient->OnRead(cbTransferred); /// 다시 받기 if (false == fromClient->PostRecv()) { fromClient->Disconnect(); return; } }
void CALLBACK SendCompletion(DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags) { ClientSession* fromClient = static_cast<OverlappedIO*>(lpOverlapped)->mObject; fromClient->DecRefCount(); if (!fromClient->IsConnected()) return; /// 에러 발생시 해당 세션 종료 if (dwError || cbTransferred == 0) { fromClient->Disconnect(); return; } fromClient->OnWriteComplete(cbTransferred); }