더북(TheBook)

ai_canonname은 리졸브된 호스트명의 대표 이름(canonical name, CNAME)을 담는다. 애초 호출 시 hintsai_flags 필드에 AI_CANONNAME 플래그를 설정하여 된 경우에만 사용된다.

ai_addr은 해당 주소 패밀리의 sockaddr을 담고 있다. 이 주소는 getaddrinfo() 호출 시 지정한 hostnameservname, 즉 호스트명과 포트 조합이 가리키는 주소를 나타낸다.

ai_next는 연결 리스트상 다음 addrinfo를 가리킨다. 하나의 도메인 네임이 여러 IPv4 및 IPv6 주소를 가리킬 수 있으므로 원하는 sockaddr을 찾을 때까지 연결 리스트를 순회해야 한다. 이렇게 하는 대신 hintai_family를 지정해 주면 원하는 주소 패밀리의 것들만 받을 수 있다. 마지막 항목의 ai_nextnullptr가 되어 마지막임을 나타낸다.

getaddrinfo()addrinfo 구조체를 반환할 때, 자체적으로 메모리를 할당해 주므로, 반환된 연결 리스트의 내용을 다 꺼내 쓴 다음엔 호출자가 직접 freeaddrinfo()를 호출해 메모리를 해제해 주어야 한다.

void freeaddrinfo(addrinfo* ai);

이때 반드시 aigetaddrinfo()에서 받은 맨 첫 번째 addrinfo를 넘겨주어야 한다. 그래야 함수 내부에서 스스로 연결 리스트를 순회하며 모든 addrinfo 노드와 그에 관련된 버퍼를 해제해 준다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.