Socket structure 에서 질문 있습니다.

kimtakeun의 이미지

IPv4 socket address structure 에 대한건데요..
책을 읽다 보니깐 32-bit IPv4 address 에 두가지 다른 방법으로 접근할수 있다고 하더군요.

serv 를 Internet socket address structure 라고 가정하고,
첫번째 방법이 serv.sin_addr 이라고 하는거랑,
두번째 방법으로 serv.sin_addr.s_addr 으로 하는거..

이 두가지 방법이 똑같이 IP address 를 참조하는거라고 하던데..
두가지 차이점이 무엇인지.. 어떨때 뭘 쓰는건지 궁금하네요..

답변 부탁드립니다.. ^^

kslee80의 이미지

sin_addr 은 in_addr 타입의 structure 이며,
sin_addr.s_addr 은 long 타입입니다.

inet 관련 함수들에 따라서..
in_addr 타입을 요구하는 함수가 있으며,
long 타입을 요구하는 함수가 있습니다.

따라서, 요구하는 타입에 맞춰서 사용하면 되겠죠.

참고적으로, in_addr 타입의 structure 는
멤버라고는 s_addr 만을 가지는 structure 입니다.

pynoos의 이미지

inet_aton, inet_addr 이 두 함수 모두 같은 일에 사용하며, inet_aton 이 보다 정교하게 검사하여 return 값으로 적법한 주소였는지를 돌려주는 일을 하는 것 외에는 없습니다.

glibc 쪽 library에서는 inet_aton이 inet_addr 내부에서 사용됩니다.