더북(TheBook)

앞서 다룬 기술들을 한데 묶어 연습해 보면 코드 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이다.

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