소켓 통신에서 소켓에 ip주소와 포트번호 등을 바인딩하기위해서
sockaddr구조체를 이용한다. 이 구조체는 다양한 버전이 존재한다.
1) sockaddr
struct sockaddr{
u_short sa_family; //address family
char sa_data[14]; //IP address + Port number
}
해당 구조체는 TCP/IP만을 위한 주소 정보를 담는 구조체가 아니라 범용적으로 사용할 수 있게 추상화된 구조체이다.
2) sockaddr_in
struct sockaddr_in{
short sin_family; //주소 체계
u_short sin_port; //포트 번호
struct in_addr sin_addr; //IP 주소
char sin_zero[8]; //전체 크기를 16bit로 맞추기위한 패딩
}
IPv4에서 사용하기 위한 TCP/IP용 주소를 담는 구조체이다.
3) SOCKADDR_STORAGE
struct sockaddr_storage{
short ss_family;
char __ss_pad1[_SS_PAD1SIZE]; //64비트 계열에서는 padsize가 48이다..
__int64 _ss_align;
char _ss_pad2[_SS_PAD2SIZE];
}
IPv4, IPv6 또는 그 외 다른 address family의 주소 정보를 담을 만큼 넉넉한 크기의 구조체이다. protocol-familly와 protocol-version에 독립적이면서도 간편한 cross-platform 개발을 향상시킬 수 있다.