SetUpdateAcceptSocket 질문입니다.
439
작성한 질문수 36
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 타입으로 캐스팅 할때처럼 데이터가 잘리지 않는건지 궁금합니다
답변 1
1
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





