3.3.2 문자열로 sockaddr 초기화하기
소켓 주소 구조체에 IP 주소와 포트값을 하나씩 채워 넣는 것은 번거로운 작업이다. 특히 프로그램이 설정 파일이나 명령줄에서 문자열을 받아온 경우 더욱 그렇다. 문자열을 sockaddr로 변환해야 하는 경우 POSIX 계열 시스템은 inet_pton() 함수를, 윈도에선 InetPton() 함수를 쓰면 이 작업을 편하게 할 수 있다.4
int inet_pton(int af, const char* src, void* dst); int InetPton(int af, const PCTSTR src void* dst);
두 함수 모두 주소 패밀리를 받는데, AF_INET이나 AF_INET6를 지정하면 된다. src에는 문자열로 된 IP 주소를 넘기며, 이는 널 종료 문자열로, 마침표로 구분된 주소이어야 한다. dst에는 변환된 sin_addr 주소 필드의 포인트를 넘겨야 한다. 성공 시 1이 리턴되며, 문자열을 해석할 수 없는 경우 0, 그 외에 시스템 에러인 경우 -1이 리턴된다. 코드 3-3에 InetPton() 함수5로 sockaddr을 초기화하는 예제를 실었다.
코드 3-3 InetPton으로 sockaddr 초기화하기
sockaddr_in myAddr; myAddr.sin_family = AF_INET; myAddr.sin_port = htons(80); InetPton(AF_INET, "65.254.248.180", &myAddr.sin_addr);
4 역주 p-to-n은 presentation to network를 뜻한다.
5 역주 inet_pton 또는 InetPton은 Windows 비스타부터 지원하므로 주의하자. 아직도 XP를 지원해야 하는 경우, 구글링해보면 다행히 WSAStringToAddress로 대체 구현할 방법을 찾을 수 있다.