인프런 커뮤니티 질문&답변

은하수님의 프로필 이미지
은하수

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

IocpCore

서버 중지 시 클라이언트에 통지가 안

해결된 질문

작성

·

533

·

수정됨

0

안녕하세요. iocpcore부터는 난이도가 급상승 하는군요.

간단한 클라이언트와 서버 모두를 overlapped callback으로 만들어 봤습니다.

그런데 연결된 상태에서 서버가 중지를 하면 클라이언트의 콜백 함수로 연결이 끊어진 이벤트가 넘어오지 않습니다.

서버는 클라이언트가 접속을 종료하면 접속 종료 이벤트를 받습니다.(콜백 함수로 전송바이트 0이 넘어옴)

서버쪽에서는 accept를 한 다음에 리턴 된 클라이언트 소켓을 넘겨서 WSARecv를 호출한 상태이고요,

클라이언트는 connect 호출 후 listenSocket을 넘겨서 똑같이 WSARecv를 호출했습니다.

어떤 원인을 생각해 볼 수 있을까요?

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

연결을 중지해도 항상 그걸 상대방이 알아차리는 것은 아니라서,
(진짜 할 말이 없어서 조용할 수도 있죠)
아무 패킷이나 보내면 그것으로 전송 실패, 즉 연결 끊김을 탐지해서 Disconnect 처리가 될 수 있습니다.
보통 그런 이유로 클라/서버는 서로 주기적으로 살아있는지 여부 탐지용 패킷을 10초마다 보내곤 합니다.
네트워크는 원래 가능성이 아주 다양해서
말씀하신 문제가 정말 그 문제인진 테스트 해봐야겠지만,
아마 위 상황으로 예상이 됩니다. (즉 클라에서도 주기적으로 뭘 보내게 수정해보세요)

은하수님의 프로필 이미지
은하수
질문자

한쪽에서 접속 종료하면 recv함수가 0을 항상 리턴 받는것은 아닌가요?

일단 강사님 코드를 수정해서 클라도 오버랩 콜백 방식으로 수정해서 테스트 하니 한쪽을 종료시 0을 리턴 받긴 합니다.

늦은 밤 답변 고맙습니다.

은하수님의 프로필 이미지
은하수

작성한 질문수

질문하기