클라가 서버에 접속하면 Session을 할당하고 클라의 정보를 입력한 후 저장한다.

 

Session 구조체

struct Session
{
	LONG sessionId = 0;
	SOCKET clientSocket;
	
	SOCKADDR_IN clientAddr;

	RingBuffer recvRingBuffer; 
	queue<Packet*> sendQueue; 

	OVERLAPPED recvOverlapped = {};
	OVERLAPPED sendOverlapped = {};	

	IOBlock* IOBlock = nullptr;
};

 

sessionId: Session을 구분할 id ( 서버에서 부여 )

clientSocket: 서버에 접속한 클라와 소통할 Socket

clientAddr: 서버에 접속한 클라 주소

recvRingBuffer: 클라가 보낸 데이터를 담아둘 원형큐

sendQueue: 클라가 전송할 데이터를 담아둘 직렬화 버퍼 큐

recvOverlapped: WSARecv 통지용

sendOverlapped: WSASend 통지용

IOBlock: Session에 I/O 작업이 남아 있는지 확인

 

 

IOBlock 구조체

struct IOBlock
{
    LONG64 IOCount = 0;
    LONG64 IsRelease = false;
};

 

IOCount: Session의 I/O 작업을 기록해둘 변수

IsRelase: Relase를 하는지에 대한 여부( = 연결 해제 )

 

IOBlock을 따로 구성해서 Session이 사용중인지 아닌지를 판별해준다.

'ChattingServer' 카테고리의 다른 글

[ChattingServer] RingBuffer ( 원형 큐 )  (0) 2025.06.01
[ChattingServer] AcceptThreadProc  (0) 2025.06.01
[ChattingServer] 직렬화 버퍼  (0) 2025.05.29
[ChattingServer] 사용자 버퍼  (0) 2025.05.29
[ChattingServer] 패킷 구조  (0) 2025.05.29

+ Recent posts