문제가 해결되긴 했는데 원인을 몰라 질문이면서 동시에 강의를 들으며 같은 이유로 고통 받으시는 mac유저분들이 계신 것 같아 자유주제로 글을 올립니다.(질문이 아니고 자유주제도 올려도 되는건지 모르겠네요)
일단 제가 해결한 방법은 ServerCore의 _listener.Init() 이후의 while문 안에 Thread.Sleep(1);을 넣어주는 것입니다.
확인되는 문제는 ServerCore에서 AcceptAsync에서 true를 반환할 때 Client소켓에서는 Server와 연결했다고 인식하지만 Server쪽에서는 Completed 이벤트가 발생하지 않으면서 OnAcceptCompleted함수가 실행되지 않는 것입니다.
확인해보려 AcceptAsync에 중단점을 찍으면 AcceptAsync는 false를 반환, 강제로 OnAcceptCompleted가 실행되면서 Server<>Client 간에 정상적으로 통신합니다.
ServerCore의 Main 함수에서 Client가 연결됐다고 주장할 때의 Listener쪽 정보를 출력하려고 while문 앞에 Thread.Sleep을 선언했다가 작동하는걸 확인했습니다. 하지만 해당 위치에서 sleep을 선언하는 경우 중간에 잠시 멈추거나, 다시 아예 멈춰버리는 문제를 확인했습니다. 이후 while문이 문제인 것 같아 while문을 지우고 sleep을 선언하지 않았을 때 main함수가 종료되기 전까지 소켓끼리 통신하는 것을 확인, while문 안에 sleep를 선언하기로 한 것까지가 현재 상황입니다.
mac의 작업 정책이 문제인지, mac의 VS가 문제인지는 알 수 없으나 강의를 통해서 배운 내용으로 이해하자면 while문이 도는 동안 ServerCore식당에 할당된 종업원들이 이벤트 발생시킬 여력 없이 열심히 while문만 작업하고 있는게 아닌가? 하는 추측 중입니다.
혹시나 mac에서 같은 원인으로 강의 진행이 안 되고 계신 분들께 도움이 되었으면 하는 맘 & sleep선언으로 해결되는 이유르 아시는 분이 계시다면 함께 공유 받고 싶은 맘에 자유주제로 글을 올리게 되었습니다. 문제가 될 경우 카테고리 변경 혹은 삭제하도록 하겠습니다.
감사합니다
감사합니다!
답글