버그 해결을 위한 모든 질문을 던져
0 votes
189 views
size_t GetHash() const { return ( GetIP4Ref() ) | 
( ( static_cast< uint32_t >( GetAsSockAddrIn()->sin_port ) ) << 13 ) | 
mSockAddr.sa_family; }



 

멀티플레이어 게임 프로그래밍이라는 책의 코드중 일부입니다.

GetIP4Ref()는 uint32_t 형식의 ip를 반환하고, sin_port와 sa_family는 sockaddr_in의 port,family를 의미합니다.

제 생각에 port나 family는 어떤 클라이언트도 똑같다고 생각하고 결국은 ip로 해쉬 값을 결정하는 것 같은데

port , family를 ip와 비트 연산을 해주는 이유가 궁금해서 질문드립니다. 구글에 찾아보니 해쉬 충돌을 피할 확률이 높다는

글을 보긴 했는데 정확한 이유를 모르겠네요..

asked (20 point) , 189 views

1 답변

0 votes
family 는 말씀처럼 같겠고요.

서버측의 고정된 listen 포트가 아니고   클라이언트측의 포트,   즉 클라이언트 측 소켓에 바인딩 된 포트 (보통 dynamic 포트 중 1개) 이므로  ip:port 를 세트로 보면 중복되는 것은 존재하지 않게 됩니다.
answered (314 point)
아하 감사합니다. 먼저 포트부분은 당연한건데 까먹고 있었네요..

그렇다면 ip와 port의 or 연산을 통해서는 절대 같은 값이 나올수 없는건가요?

그리고 port에 shifting을 한 이유도 궁금합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

402 질문
536 answers
548 댓글
16,872 users