본문 바로가기
개발/소켓통신

sockaddr

by 사과잼빵 2017. 1. 9.

소켓 통신에서 소켓에 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 개발을 향상시킬 수 있다.