inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

RecvBuffer

AcceptEx()에 recvBuffer 지정시

461

지호

작성한 질문수 4

0

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

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

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

 

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

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

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

 

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

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

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

네트워크 MMORPG windows-server

답변 1

0

인프런 AI 인턴

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

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

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

감사합니다.

writeLock을 잡을때 꼭 empty 상태여야하는 이유?

0

36

2

Memory Pool에서 오버플로우 질문입니다.

0

73

2

포토폴리오 및 진로 관련하여 고민입니다.

0

129

1

포토폴리오 관련 고민입니다.

0

66

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

89

2

성능 테스트 결과

0

108

2

게임 서버 Stateful, Stateless 진로 고민

0

133

1

WaitOnAddress와 Sleep의 차이 질문

0

84

1

궁금한거 있습니다.

0

84

2

JobTimer 구동 스레드

0

108

2

TryPop() 동작 관련 질문

0

81

1

로드맵 C#서버 C++서버 방향성 질문

0

151

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

73

1

생명주기를 위한 의도적 복사

0

88

2

락프리의 실무에서 사용 질문

0

146

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

105

2

mutex와 sleep 차이점

0

120

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

160

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

98

1

공부법 관련해서

0

184

2

MakeShared 함수 관련

0

114

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

145

2

운영체제관련 질문입니다

0

132

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

120

2