ChattingServer
[ChattingServer] AcceptThreadProc
program-yam
2025. 6. 1. 19:22
AcceptThreadProc를 구현했다.
클라가 접속하면 session을 할당하고 저장하며 동기로 처리한다.
unsigned __stdcall CoreNetwork::AcceptThreadProc(void* argument)
{
CoreNetwork* instance = (CoreNetwork*)argument;
if (instance != nullptr)
{
for (;;)
{
SOCKADDR_IN clientAddr;
int addrLen = sizeof(clientAddr);
// 클라 연결 대기
SOCKET clientSock = accept(instance->_listenSocket, (SOCKADDR*)&clientAddr, &addrLen);
if (clientSock == INVALID_SOCKET)
{
DWORD error = WSAGetLastError();
std::cout << "accept failed : " << error << std::endl;
break;
}
// 연결 수락 총 개수 증가
instance->_acceptTotal++;
instance->_acceptTPS++;
// 세션 할당
Session* newSession = new Session();
newSession->sessionId = ++instance->_sessionId;
newSession->clientAddr = clientAddr;
newSession->clientSocket = clientSock;
// IOCP에 등록
CreateIoCompletionPort((HANDLE)newSession->clientSocket, instance->_HCP, (ULONG_PTR)newSession, 0);
instance->OnClientJoin(newSession);
// sessions에 저장
instance->_sessions.push_back(newSession);
}
}
return 0;
}