더북(TheBook)

SocketAddressFactory엔 하나의 스태틱 멤버 함수가 있어 이것으로 주어진 문자열에 대한 SocketAddress를 생성할 수 있다. 이 문자열은 호스트 이름과 포트를 나타내는 것이다. 이 함수는 SocketAddressPtr를 리턴하는데 이름이 잘못되어 있는 등 경우엔 nullptr를 리턴하게 되어 있다. SocketAddress 생성자 대신 이렇게 별도의 스태틱 멤버 함수로 구현하면 이같이 잘못된 경우에 예외를 던지지 않고도 적절히 처리하는 것이 가능하다. 즉, CreateIPv4FromString()이 널이 아닌 포인터를 리턴한다면 이것은 확실히 유효한 SocketAddress 객체인 셈이며, 어떤 경우에도 잘못 초기화된 객체가 존재할 가능성이 없는 것이다.

이 함수는 우선 이름에서 콜론을 찾아 포트 번호를 분리한다. 다음 hint로 쓸 addrinfo 구조체를 만들어, IPv4 결과만 리턴되도록 한다. 이들 인자를 getaddrinfo()에 넘긴 뒤 리스트를 순회하여 널이 아닌 주소를 찾는다. 찾은 주소를 뽑아 SocketAddress의 적당한 생성자로 객체를 생성한 뒤 리스트는 해제한다. 중도에 문제가 생기면 널을 리턴한다.

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