ChattingServer
[ChattingServer] SendComplete ( WSASend 통지 완료 처리 )
program-yam
2025. 6. 2. 19:34
IOCP Send 완료 통지 함수인 SendComplete를 구현했다.
WSASend 완료 통지가 오면, 전송 완료된 패킷을 먼저 정리한다.
isSend을 0으로 바꿔 WSASend를 걸 수 있도록 한다.
isSend가 0으로 바뀌기 전에 큐잉된 packet들이 있을 수 있으므로 sendQueue의 크기를 재고 0보다 크면 SendPost를 호출한다.
void CoreNetwork::SendComplete(Session* sendCompleteSession)
{
// 전송 완료된 패킷을 정리한다.
for (int i = 0; i < sendCompleteSession->sendPacketCount; i++)
{
delete sendCompleteSession->sendPacket[i];
sendCompleteSession->sendPacket[i] = nullptr;
}
sendCompleteSession->sendPacketCount = 0;
// isSend를 0 으로 바꿔서 WSASend를 걸수 있도록 해준다.
InterlockedExchange(&sendCompleteSession->isSend, 0);
// 만약 위에서 바꾸기 전에 큐잉만 하고 빠질 경우
// 여기서 크기를 검사해서 WSASend를 걸어준다.
if (sendCompleteSession->sendQueue.size() > 0)
{
SendPost(sendCompleteSession);
}
}