본문 바로가기
학습 노트/개인학습

250516 금요일 @ 19일차

by 삼색먕 2025. 5. 17.

오전~오후 운영체제를 3챕터 훑어보기

 

오전 중반에 클라이언트 종료 처리를 했다.
찾아보니까 GetQueuedCompletionStatus에서 가장크게는 이렇게였다.
//비정상적종료:리턴값 false, 수신바이트 0
//정상적인종료:리턴값 true, 수신바이트 0
그런데 직접 조금 해보니까 처음에 TimeOut시간을 1000으로해놔서 이경우에도 false에 수신바이트가 0이었다..
구분할 방법을 찾아보니 WSAGetLastError()가 258가 1초마다오고 클라가 끊길때는 64가 왔다.

그래서 또 찾아보니 클라이언트 측에서 강제로 종료(프로세스를 강제 종료시켰을경우)
error code (64) ERROR_NETNAME_DELETED 값이 오는걸 알게되서 분기를 나눴다.
그리고 클라이언트정보를 overlapped에 캐싱해서 하는게 뭔가 찝찝해서 SOCKET을 등록할때 key로 넘겨주었고,
GetQueuedCompletionStatus 할때 받은 Socket값으로
ClientManager에서 찾아서 Disconnect처리 하도록했다.

근데 혹여나 Listener소켓이 이곳에 들어오지 않을까? 라는생각은 했지만 
ERROR_NETNAME_DELETED코드 자체가 상대방이 강제로 종료했을때의 경우이기 떄문에
신경안쓰기로했다 
하지만 혹시모르니 key값(socket)이 0이거나 Invalid_socket 는 예외처리했다.

이후에 패킷을 구조를 짜려고했는데 또 한꺼번에 할려고하니까 제대로 되지가 않았다.
그래서 그냥 다지우고 간단하게 직렬화/역직렬화를 하드코딩했다.
이후에 조금씩 구조화를 하는게 좋을것같다.
Echo패킷 만들어서 보내기 테스트. / 클라이언트 종료 테스트

 

'학습 노트 > 개인학습' 카테고리의 다른 글

250518 일요일 @ 21일차 / 프로토버프 설치  (0) 2025.05.19
250517 토요일 @ 20일차  (0) 2025.05.17
250515 목요일 @ 18일차  (0) 2025.05.16
250514 수요일 @ 17일차  (0) 2025.05.15
250513 화요일 @ 16일차  (0) 2025.05.14

댓글