inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

IocpCore

SetUpdateAcceptSocket 질문입니다.

439

snu

작성한 질문수 36

0

1. 일반 accept 함수가 리턴하면 client 소켓과 통신할 소켓이 리턴되는데 listen 소켓 속성과 같은 속성이 리턴된다고 알고있습니다. 하지만 AcceptEX 함수에서는 client와 통신할 소켓을 미리 만들어 인자로 전달하기 떄문에 수동으로 SetUpdateAcceptSocket 를 호출하는 것인가요?

2.getpeername 함수에서 두번째 인자로 

reinterpret_cast<SOCKADDR*> 캐스팅을 해주는 이유가 궁금합니다.

static_cast나 (SOCKADDR*) 과 같은 캐스팅보다 위와 같이 하는 이유가 궁금합니다.

 

3. AcceptEx 함수에 IocpEvent 형 acceptEvent를 Overlapped 타입으로 캐스팅하여 전달하는데

OVERLAPPED 구조체를 상속하여 크기가 큰 클래스(IocpEvent)를 전달하여도 OVERLAPPED 타입에 맞게 데이터가 잘리지 않고 

GetQueuedCompletionStatus에서 복원는데 이게 맞는건가요?

포인터로 주소만 전달하기 때문에 가능한 것인지 int -> char 타입으로 캐스팅 할때처럼 데이터가 잘리지 않는건지 궁금합니다 

network MMORPG windows-server

답변 1

1

Rookiss

1. API 관련 질문은, 항상 MSDN을 찾아보셔야 합니다.

When the AcceptEx function returns, the socket sAcceptSocket is in the default state for a connected socket. The socket sAcceptSocket does not inherit the properties of the socket associated with sListenSocket parameter until SO_UPDATE_ACCEPT_CONTEXT is set on the socket. Use the setsockopt function to set the SO_UPDATE_ACCEPT_CONTEXT option, specifying sAcceptSocket as the socket handle and sListenSocket as the option value.

https://docs.microsoft.com/en-us/windows/win32/api/mswsock/nf-mswsock-acceptex

2. (SOCKADDR*) C 스타일 캐스팅은 가장 강력하지만 다소 위험한 형태라서, C++에선 4종 캐스팅 중 하나를 사용을 권장합니다. 각종 캐스팅 차이는 여기서 설명하기엔 너무 길기 때문에 리서치를 해보시기 바랍니다.

3. 네 정확히 OVERLAPPED 부분만 건드리기 때문에,
해당 부분만 유효하게 건내주면 됩니다.
 
다른 방식으로는 상속이 아니라 멤버 변수로 두고 그 주소를 넘겨줘도 됩니다.

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

0

63

2

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

0

94

2

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

0

168

1

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

0

90

1

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

0

107

2

성능 테스트 결과

0

117

2

게임 서버 Stateful, Stateless 진로 고민

0

145

1

WaitOnAddress와 Sleep의 차이 질문

0

98

1

궁금한거 있습니다.

0

92

2

JobTimer 구동 스레드

0

116

2

TryPop() 동작 관련 질문

0

86

1

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

0

162

2

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

0

81

1

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

0

94

2

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

0

154

2

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

0

109

2

mutex와 sleep 차이점

0

133

1

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

0

167

2

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

0

102

1

공부법 관련해서

0

190

2

MakeShared 함수 관련

0

119

1

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

0

152

2

운영체제관련 질문입니다

0

144

1

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

0

125

2