sockaddr_in에서 IPv4 주소는 왜 구조체로 선언되나요??
글쓴이: tyolee83 / 작성시간: 화, 2007/03/06 - 11:22오전
네트워크 프로그래밍 초보입니다.
막 공부하다가 궁금한것이 생겨서요...
sockaddr_in 구조체를 보면
struct sockaddr_in{
sa_family_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
이렇게 되어있구요 다시 in_addr 구조체가
struct in_addr{
uint32_t s_addr;
};
이렇게 선언 되어 있잖아요..
제 생각엔 sockaddr_in 에 ip address넣는 부분에 그냥
uint32_t sin_addr;
이런식으로 선언되어 있어도 될것 같은데요...
(sockaddr_in 자체가 IPv4를 나타내는 구조체니까)
왜 이런식으로 다시 한번 구조체로 들어가는지 궁금합니다.
도와주세요~
Forums:
http://kldp.org/Translations/
http://kldp.org/Translations/html/Socket_Programming-KLDP/Socket_Programming-KLDP.html
살아남은 가장 뭣같은 유니온인 struct in_addr 에 대한 보다 신중한 검토가 필요할 것같다.
/* Internet address (a structure for historical reasons) */
struct in_addr {
unsigned long s_addr;
};
음.. 이것은 유니온 "이었었"다. 그러나 그런 시절은 지나갔다. 시원하게 없어졌군! 따라서 만약 "ina"를 struct sockaddr_in형으로 정의해 놓았다면 ina.sin_addr.s_addr 로 NBO 상태의 4바이트 인터넷 어드레스를 정확하게 참조할 수 있을 것이다. 만약 사용하는 시스템이 struct in_addr에 그 끔찍한 유니온을 아직도 사용하고 있더라도 #defines S 덕분에 위에 한것과 마찬가지로 정확하게 참조할 수는 있을 것이다.
라는군요. ^^;
좋은 하루 되세요!
댓글 달기