반응형

소켓 프로그래밍에서 클라이언트/서버의 구체적인 주소를 표현하기 위해서

  1. 주소 체계
  2. IP주소
  3. Port번호

이 세 가지가 지정되어야 하며 이를 소켓 주소라고 합니다.

 

이를 담을 구조체 sockaddr은 다음과 같이 정의되어 있습니다.

struct sockaddr{
    u_short sa_family;	// address family
    char sa_data[14];	// 주소 (IP + Port)
};

 

더보기

위 코드에서 u_short는 insigned short를 나타내는데 이는 type.h 헤더 파일에 들어있습니다.

위의 sockaddr 구조체는 IP주소와 Port번호를 구분하기가 불편하므로 인터넷 프로그래밍에서는 sockaddr 구조체 대신 IP Address 4바이트와 Port번호 2바이트를 구분하여 액세스 할 수 있는 인터넷 전용 소켓주소 구조체 sockaddr_in을 사용합니다.

 

socketaddr_in

struct socketaddr_in {
    short sin_family;		// 주소 체계
    u_short sin_port;		// 16비트 Port번호
    struct in_addr sin_addr;	// 32비트 IP 주소
    char sin_zero[8];		// 전체 크기를 16Bytes로 맞추기 위한 dummy
}

// 32비트의 IP 주소를 저장할 구조체
struct in_addr {
    u_long s_addr;
}

 

sin_zero[8]은 sockaddr과 sockaddr_in의 호환성을 위해 사용합니다.

 

sin_family AF_INET (인터넷 주소 체계)
AF_UNIX (유닉스 파일 주소 체계)
AF_NS (XEROX 주소 체계)

 

반응형