-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
AcceptAsync 이후 pending 관련
22.02.28 15:24 작성 조회수 357
0
void RegisterAccept(SocketAsyncEventArgs args)
{
args.AcceptSocket = null;
bool pending = _listenSocket.AcceptAsync(args);
if (!pending)
{
OnACceptCompleted(null, args);
}
}
위 Function에서 보면 pending == false 인경우 OnACceptCompleted 함수를 바로 실행시키는데요
init 함수에서
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += new EventHandler<SocketAsyncEventArgs>(OnACceptCompleted);
RegisterAccept(args);
위와같이 args.Completed에 OnACceptCompleted를 등록해 주었기 때문에 펜딩이 안되어 바로 Accept가 된 상황에서도 등록한 이벤트로 인해 OnACceptCompleted 가 실행되는것 아닌가요?
if (pending == false)
{
OnACceptCompleted(null, args);
}
이 코드는 불필요 한게 아닌가 궁금합니다.
실제로 로그를 찍어보면 서버가 AcceptAsync를 하는 시점과 클라이언트가 접속하는 시간 차이가 있어서 pending이 항상 true로찍혔고 그래서 pending이 false일때에 대한 상황은 재현하지 못했습니다.
답변을 작성해보세요.
0
Rookiss
지식공유자2022.02.28
안녕하세요
모든 수강생들에게 드리는 말씀이지만,
우리가 만든게 아닌 외부 함수는 꼭 MSDN 문서를 살펴보는 습관을 들여야 합니다.
구글에서 AcceptAsync를 쳐보면 자세한 스펙에 대해 MS에서 정리를 해놨는데요.
https://docs.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socket.acceptasync?view=net-6.0
작업이 동기적으로 완료된 경우 (false),
Completed이 이벤트가 호출되지 않는다는 점을 알 수 있습니다.
따라서 이 경우 우리가 직접 호출해야 합니다.
답변 1