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);
}
}
'ChattingServer' 카테고리의 다른 글
[ChattingServer] 채팅 서버 프로토콜 (0) | 2025.06.06 |
---|---|
[ChattingServer] CriticalSection으로 SendQueue 동기화 (1) | 2025.06.06 |
[ChattingServer] SendPacket, SendPost ( packet 큐잉, WSASend 걸기 ) (0) | 2025.06.02 |
[ChattingServer] RecvPost ( WSARecv 걸기 ) (0) | 2025.06.02 |
[ChattingServer] RecvComplete ( WSARecv 통지 완료 처리 ) (0) | 2025.06.02 |