소켓 통신 #1 - 소켓 통신에 쓰이는 구조체
- by tapito
sockaddr 구조체
소켓을 통해 여러 형태의 네트워크를 거의 비슷한 방식으로 데이터를 교환할 수 있습니다. sockaddr는 일종의 추상 클래스처럼 소켓으로 통신하기 위한 여러 네트워크의 상위 구조체입니다. sockaddr 아래 인터넷망을 사용해 통신하는 구조체인 sockaddr_in과 유닉스 운영체에서 프로세스간 통신을 위해 사용되는 sockaddr_un의 구조체가 선언되어 있습니다.
/* sockaddr 구조체 */ struct sockaddr { sa_family_t sa_family; char sa_data[14]; };
sa_family: 소켓이 사용되는 네트워크의 종류입니다. 다음 값 중 하나가 올 수 있습니다.
AF_INET: IPv4를 사용하는 인터넷망에 접속합니다.
AF_INET6: IPv6를 사용하는 인터넷망에 접속합니다.
AF_LOCAL: 유닉스 운영체제에서 프로세스간 통신을 수행합니다.
sa_data: sa_family값에 따른 최대 14바이트의 부가 정보입니다. 이 필드의 내용은 sockaddr_in과 sockaddr_un에서 구체화됩니다.
sockaddr_in 구조체
in은 internet의 앞글자입니다. 소켓을 통해 인터넷 망에 접속하기 위한 구조체입니다. AF_INET 모드에서 사용할 수 있습니다.
/* sockaddr_in 구조체 */ struct sockaddr_in { sa_family_t sin_family; // = 항상 AF_INET uint16_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct in_addr { uint32_t s_addr; };
sin_family: sockaddr의 sa_family와 같습니다.
sin_port: 통신을 위해 사용할 포트 번호입니다.
sin_addr: 접속할 대상(상대방)의 IP 주소입니다. 자료형인 in_addr 구조체는 Internet Address의 줄임 표현으로 4바이트 IP 주소를 나타냅니다.
sin_zero: sockaddr에서 sa_data를 통해 확보한 14바이트 외 나머지 공간입니다. 항상 0이며 사용되지 않습니다.
sockaddr_in6 구조체
AF_INET6 (IPv6)를 사용하는 네트워크에 접속하기 위한 구조체입니다.
/* sockaddr_in6 구조체 */ struct sockaddr_in6 { sa_family_t sin6_family; // = 항상 AF_INET6 in_port_t sin6_port; uint32_t sin6_flowinfo; struct in6_addr sin6_addr; uint32_t sin6_scope_id; }; struct in6_addr { unsigned char s6_addr[16]; };
sin6_family: sockaddr의 sa_family와 같습니다.
sin6_port: 통신을 위해 사용할 포트 번호입니다.
sin6_flowinfo: 라우터가 패킷이 전달되는 경로를 결정하는데 필요한 값입니다.
sin6_addr: 접속할 대상(상대방)의 IP 주소입니다.
sin6_scope_id: 버전에 따라 이 멤버는 없을 수도 있습니다. IP 주소에 따른 계층이 적절한지를 검증합니다. 계층은 아래 값 중 하나입니다.
- 0x0: reserved
- 0x1: interface-local
- 0x2: link-local
- 0x4: admin-local
- 0x5: site-local
- 0x8: organization-local
- 0xe: global
- 0xf: reserved
sockaddr_un 구조체
서로 다른 프로세스(실행중인 프로그램) 사이에 데이터를 주고받아야 할 때 사용되는 구조체입니다.
/* sockaddr_un 구조체 */ struct sockaddr_un { sa_family_t sun_family; char sun_path[UNIX_PATH_MAX]; };
sun_family: sockaddr 구조체의 sa_family와 같습니다.
sun_path: 소켓으로 접속할 파일의 경로입니다. UNIX_PATH_MAX는 상수 108입니다.
'Programming Language > C&C++' 카테고리의 다른 글
소켓 통신 #2 - AF_INET 사용하기 (2) (0) | 2014.09.19 |
---|---|
소켓 통신 #2 - AF_INET 사용하기 (1) (0) | 2014.09.19 |
C++11에서 추가된 클래스 - thread (0) | 2014.04.17 |
C언어 표준 문자열 관련 함수 – ANSI, Wide Char별 함수 이름 정리 (0) | 2011.02.14 |
코드 컨벤션 정리 – 낙타, 파스칼, 헝가리안 (0) | 2011.02.11 |