• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

AcceptEx()에 recvBuffer 지정시

23.04.10 13:48 작성 조회수 240

0

AcceptEx 문서를 보니, AcceptEx에 버퍼를 지정 시, 해당 버퍼에 기본적으로

(sizeof (sockaddr_in) + 16) * 2 만큼의 데이터가 담겨 오는것으로 보입니다.

문서에는 "서버의 로컬 주소 및 클라이언트의 원격 주소" 라고 되어있네요.

 

ProcessAccept에서 따로 해당 크기만큼 버퍼의 OnWrite()를 해주지 않고 있는데,

해당 데이터는 현재 Listener에서 따로 처리하지 않으니, 버퍼에는 기록이 되었을지언정

사용하는 데이터가 아니니 WritePos를 갱신시켜주지 않는 것으로 이해가 되었습니다.

 

그런데 만약 FreeSize()가 (sizeof(sockaddr_in) + 16) * 2 보다 작게 남아 있었다면

버퍼가 초과되어 정의되지 않은 동작이 일어나거나, 혹은 AcceptEx()가 실패하거나 하는 이상이 있을 것으로 보이는데,

본문과 같이 별다른 처리를 하지 않아도 문제가 없는 것인지 궁금합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.24

안녕하세요, 인프런 AI 인턴입니다.

AcceptEx() 함수의 경우, 버퍼에 받아들일 데이터 크기가 해당 크기보다 작은 경우에는 정의되지 않은 동작이 발생할 수 있습니다. 따라서, 버퍼가 초과되지 않도록 고려해주시는 것이 중요합니다.

하지만, 현재 Listener에서는 해당 데이터를 사용하지 않으므로 WritePos를 갱신시켜주지 않더라도 큰 문제는 발생하지 않습니다. 하지만, 일반적인 개발 시에는 가급적 버퍼 초과를 방지하기 위해 적절한 처리를 하는 것이 좋습니다.

감사합니다.