sockaddr 관련 구조체
Socket Programming을 할 때 매번 사용하면서도 항상 헷갈려서 정리를 해 보았음.
Structure | Meaning |
---|---|
in_addr | ip4 |
in6_addr | ip6 |
sockaddr | family + dummy[14] |
sockaddr_in | family + ip4 + port |
sockaddr_in6 | family + ip6 + port |
// IPv4 주소(4byte == 32bit) (in.h)
struct in_addr {
uint32_t s_addr;
};
// IPv6 주소(16byte == 128bit) (in.h)
struct in6_addr {
union {
uint8_t __u6_addr8[16];
uint16_t __u6_addr16[8];
uint32_t __u6_addr32[4];
} __in6_u;
#define s6_addr __in6_u.__u6_addr8
#define s6_addr16 __in6_u.__u6_addr16
#define s6_addr32 __in6_u.__u6_addr32
};
// sockaddr...로 시작하는 구조체의 Parent 구조체 (socket.h)
struct sockaddr {
unsigned short int sa_family; // AF_INET은 IPv4, AF_NET6는 IPv6
char sa_data[14];
};
// IPv4 주소 및 포트 정보 (in.h)
struct sockaddr_in {
unsigned short int sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
// IPv6 주소 및 포트 정보 (in.h)
struct sockaddr_in6 {
unsigned short int sin6_family;
uint16_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};