앞서 다룬 기술들을 한데 묶어 연습해 보면 코드 3-1처럼 소켓 주소를 만들고 IP 주소는 65.254.248.180, 포트는 80번으로 지정할 수 있다.
코드 3-1 sockaddr_in 구조체 초기화하기
sockaddr_in myAddr; memset(myAddr.sin_zero, 0, sizeof(myAddr.sin_zero)); myAddr.sin_family = AF_INET; myAddr.sin_port = htons(80); myAddr.sin_addr.S_un.S_un_b.s_b1 = 65; myAddr.sin_addr.S_un.S_un_b.s_b2 = 254; myAddr.sin_addr.S_un.S_un_b.s_b3 = 248; myAddr.sin_addr.S_un.S_un_b.s_b4 = 180;
Note ≣
어떤 플랫폼은 sockaddr에 추가 필드를 두어 구조체의 길이를 지정하게 하는 것도 있다. 미래에 더 길어진 sockaddr 구조체를 사용하고자 하는 의도이다. 이런 플랫폼에선 그 필드에 구조체의 sizeof() 값을 담아주면 된다. macOS의 예를 들면, sockaddr_in myAddr이 있다고 할 때, myAddr.sin_len = sizeof(myAddr);로 해 주면 된다.3
3 역주 macOS에서 sockaddr_in은 여전히 16바이트인데, sin_len이 추가된 대신 sin_family가 1바이트로 줄었다. sockaddr 구조체도 마찬가지로 1바이트 sa_len이 추가된 대신 sa_family가 uint8이다.