* struct sockaddr_in : IPv4의 주소 체계를 나타내는 구조체
struct sockaddr_in
{
short sin_family; //주소 체계(address family)
unsigned short sin_port; // 16비트 TCP/UDP Port
struct in_addr sin_addr; // 32비트 IPv4주소
char sin_zero[8]; // 사용되지 않음
};
sin_family : 프로토콜 체계마다 주소 체계가 다르다. sin_family 변수에는 사용되는 주소 체계에 대한 정보를 대입해 준다. 표현될 수 있는 주소 체계 정보는 밑에 표와 같다.
주소체계(Address Family) |
정의 |
AF_INET |
IPv4 인터넷 프로토콜 |
AF_INET6 |
IP_6 인터넷 프로토콜 |
AF_LOCAL |
Local 통신을 위한 UNIX 프로토콜 |
sin_port : 네트웍 바이트 오더로 이루어진 포트 번호 : 16 비트 Port 정보를 대입해 준다. 네트워크 바이트 순서로 대입해야 한다.
sin_addr : 네트웍 바이트 오더로 이루어진 아이피 번호 : 32비트 IP 정보를 대입해 준다. 역시 바이트 순서로 저장해야 한다.
sin_zero : 사용되지 않는 필드이며 0으로 설정될 수 있습니다. SOCKADDR에서 같의 위치의 같은 크기또한 사용하지 않습니다. ( 특별한 의미 없이 단순한 채워주기(padding)을 위한 목적으로 사용된는 구조체 멤버이다.
: sin_addr 필드는 IN_ADDR 타입의 또 다른 구조체입니다. 프로그램은 IN_ADDR 구조체를 이용하여 IP 어드레스의 각 부분에 접근 할 수 있습니다. IN_ADDR 구조체는 윈도우즈 소켓 헤더 파일인 WINSOCK.H 에 다음과 같이 선언되어 있습니다.
ex) struct in_addr{
uint32_ts_addr;//32비트 IPv4 인터넷 주소
};
생소한 데이터 타입들이 나오고 있다. 이러한 데이터 타입들은 POSIX에서 그 근거를 찾을 수 있다. POSIX(Portable Operating System Interface)란 유닉스 계열의 운영 체제를 위해 표준화 해 놓은 인터페이스(API)다.
Data type |
Description |
Header |
int8_t uint8_t int16_t uint16_t int32_t uint32_t |
signed 8-bit int unsigned 8-bit in (unsigned char) signed 16-bit int (unsigned short) unsigned 16-bit int (unsigned short) unsigned 32-bit int(unsigned long) |
<sys/types.h> |
sa_family_t socklen_t |
address family length of struct |
<sys/socket.h> |
이런 식으로 데이터 타입을 따로 선언해 놓은 이유는 확장성을 고려한 결과이다. 즉 int32_t라는 데이터 타입을 사용한다면, 어떠한 경우에도 4바이트 데이터 타입이라는 것을 보장 받을 수 있다.
'TCP/IP' 카테고리의 다른 글
Nagle 알고리즘 (0) | 2011.05.02 |
---|---|
getsockopt() , setopt () 함수 (0) | 2011.05.02 |
ioctl : 장치 제어 함수 (0) | 2011.04.29 |
소켓 함수 및 헤더들 (0) | 2011.02.07 |
sendto() (0) | 2010.03.28 |
SOCKET() 함수 (0) | 2010.03.25 |
Linux: SOCK_PARCKET (0) | 2009.12.03 |
ICMP 프로토콜 (0) | 2009.11.16 |
인터넷 소켓 활용 (0) | 2009.08.31 |
TCP/IP 열혈 강의 (0) | 2009.08.12 |