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

김원태님의 프로필 이미지
김원태

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

논블로킹 송수신 연결 관련 질문입니다.

해결된 질문

작성

·

237

0

강사님 안녕하세요. 

논블로킹을 위해서 Register함수와 연결체크하는 콜백함수 OnAccepted함수를 사용하는 코드 중에 궁금한게 있어서 

질문 남깁니다.

- 서버 프로그램만 중단점 걸어 놓은 상태인데요. 여기서 

- 클라이언트 프로그램을 실행시키면 서버쪽의 OnAccept함수에 디버그포인트가 걸리는데 

//Init함수에서 작성한 코드인데요. 

SocketAsyncEventArgs args = new SocketAsyncEventArgs();

 args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted);

//========================

작성한 부분에서 , 클라가 연결 시도시에 connect 접속 신호가 args에게 전달이 되서 2번째 그림처럼

디버깅 포인트가 걸린건가요? 

제가 궁금해서 서버 쪽 모든 코드에 디버깅포인트 걸었는데 

서버 Main문의 while 문에서만 걸리는데요, 어떠한 동작 원리를 가지고 진행이 되는지 알고 싶습니다! 

답변 2

1

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

args에 전달이 되었다는 표현은 살짝 애매하고,
args.Completed에 넣어준 콜백 함수를 통해서 통지를 받는 것입니다.

비동기 방식의 Accept 함수를 걸어놓은 상태에서
어떤 클라가 서버로 접속하게 되면
우리가 처음에 지정한 함수를 호출해주게 됩니다.

그리고 커널단에서 네트워크 로직을 처리한 다음
쓰레드 풀에 있는 다른 애를 깨워서 해당 함수를 호출해주기 때문에
Main 쓰레드에 BP를 걸어도 의미가 없습니다. (Main 쓰레드와 무관함)

0

김원태님의 프로필 이미지
김원태
질문자

친절하게 알려주셔서 감사합니다!

김원태님의 프로필 이미지
김원태

작성한 질문수

질문하기