AcceptAsync 이후 pending 관련
514
작성자 없음
작성한 질문수 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일때에 대한 상황은 재현하지 못했습니다.
답변 1
0
안녕하세요
모든 수강생들에게 드리는 말씀이지만,
우리가 만든게 아닌 외부 함수는 꼭 MSDN 문서를 살펴보는 습관을 들여야 합니다.
구글에서 AcceptAsync를 쳐보면 자세한 스펙에 대해 MS에서 정리를 해놨는데요.
https://docs.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socket.acceptasync?view=net-6.0
작업이 동기적으로 완료된 경우 (false),
Completed이 이벤트가 호출되지 않는다는 점을 알 수 있습니다.
따라서 이 경우 우리가 직접 호출해야 합니다.
TLS 질문드립니다.
0
50
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
54
2
Unity Span
0
80
2
XML, Dll 차이점
0
109
2
Session 질문입니다
0
81
1
Write Read 커서 키워드
0
77
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
72
2
네트워크 Send 전담 스레드 배치
0
99
2
UnhandledException 으로 서버 터지는 경우
0
88
2
컨텐츠 단, 엔진 단
0
106
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
150
2
유니티6 버전
0
99
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
104
2
C++ 전혀 모르는데 C# 서버
0
170
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
96
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
64
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
193
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
83
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
107
1
스핀락 질문.
0
110
2





