• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

AcceptAsync()함수의 pending 상태에 대해서 질문드립니다.

22.01.11 12:46 작성 조회수 147

0

섹션2. 네트워크 프로그래밍

listener 파트에서 AcceptAsync함수에 대해서 궁금한점이 있습니다.

AcceptAsync 함수가 처음에 잘 이해가 안가서 디버깅을 해보려고 했는데요.

보통은 pending상태가 true여서 콜백으로 OnAcceptCompleted가 호출되는건 이해가 됬는데, pending 상태가 false인 경우는 어떤 경우인지 궁금합니다.

강의 내용이나 문서를 찾아보고 이해한 바로는 AcceptAsync가 호출되는 경우 이미 Connect요청이 있어서 처리한 경우 콜백으로 호출되지 않고 바로 OnAcceptCompleted를 호출해서 처리한다고 이해했는데요.

그래서 서버쪽에서는 AcceptAsync함수를 호출하기 직전에 중단점을 걸고, 클라이언트쪽에서는 Connect하고 Send까지 한 후에 다시 AcceptAsync를 호출하게 하면 pending=false가 되지 않을까 했는데, 결과는 계속 pending=true인 상태네요.

해당 부분 디버깅을 통해서 확인할 수 있는지 궁금하고, 실무에서 pending이 false로 리턴되는 경우가 자주 있는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

pending = false인 경우는 '바로' 처리할 수 있는 상태입니다.
예를 들어 Send 함수를 호출할 때,
TCP SendBuffer로 바로 데이터를 복사할 수 있으면 바로 완료가 되는 것이고
Accept 함수를 호출할 때, 이미 Connect 요청이 와서
바로 처리할 수 있는 Session이 있으면 바로 완료가 되겠죠.