sockaddr(3type)
#include <sys/socket.h>
struct sockaddr {
sa_family_t sa_family; /* Address family */
char sa_data[]; /* Socket address */
};
struct sockaddr_storage {
sa_family_t ss_family; /* Address family */
};
typedef /* ... */ socklen_t;
typedef /* ... */ sa_family_t;
//Internet domain sockets
#include <netinet/in.h>
struct sockaddr_in {
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port; /* Port number */
struct in_addr sin_addr; /* IPv4 address */
};
struct sockaddr_in6 {
sa_family_t sin6_family; /* AF_INET6 */
in_port_t sin6_port; /* Port number */
uint32_t sin6_flowinfo; /* IPv6 flow info */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* Set of interfaces for a scope */
};
struct in_addr {
in_addr_t s_addr;
};
struct in6_addr {
uint8_t s6_addr[16];
};
typedef uint32_t in_addr_t;
typedef uint16_t in_port_t;
//UNIX domain sockets
#include <sys/un.h>
struct sockaddr_un {
sa_family_t sun_family; /* Address family */
char sun_path[]; /* Socket pathname */
};
Description
sockaddr
: ์์ผ ์ฃผ์๋ฅผ ์ ์ํ๋ ์ ๋ค๋ฆญ ํ์sa_family_t
: socket address family, ์ฆ ์ด๋ค ๊ตฌ์ฒด์ ์ธ ์์ผ ํ๋กํ ์ฝ์ ์๋ฏธํ๋์ง๋ฅผ ์ ์ํ๋ค. ๋ํ์ ์ผ๋กAF_INET
,AF_INET6
๊ฐ ์๊ณ , ๊ฐ๊ฐ IPv4, IPv6๋ฅผ ์๋ฏธํ๋ค.sockaddr_in
: IPv4 ์ธํฐ๋ท ๋๋ฉ์ธ ์์ผ ์ฃผ์๋ฅผ ์ ์ํ๋ ๊ตฌ์ฒดํ์struct in_addr
: ๋คํธ์ํฌ ๋ฐ์ดํธ ์ค๋(๋น ์๋์ธ)์ผ๋ก ์ ์ฅ๋ IP์ฃผ์๋ฅผ ๋ด๋ ๊ตฌ์กฐ์ฒด์ด๋ค. 32๋นํธ ์ ์ ๋ฉค๋ฒ ํ๋ (in_addr_t
) ๋ฅผ ๊ฐ๊ณ ์๋ค.in_port_t
: ๋คํธ์ํฌ ๋ฐ์ดํธ ์ค๋(๋น ์๋์ธ)๋ก ๋ณํ๋uint16_t
ํ์ ์ ์
sockaddr_in6
: IPv6 ์ธํฐ๋ท ๋๋ฉ์ธ ์์ผ ์ฃผ์๋ฅผ ์ ์ํ๋ ๊ตฌ์ฒดํ์sockaddr_un
: UNIX ๋๋ฉ์ธ ์์ผ ์ฃผ์๋ฅผ ์ ์ํ๋ ๊ตฌ์ฒดํ์
๋ชจ๋ ์ฃผ์๊ฐ(IP์ฃผ์, Port)์ ๋คํธ์ํฌ ๋ฐ์ดํธ ์ค๋๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, htonl, htons, ntohl, ntohs {htonl(3)}๋ก ํธ์คํธ ์ฃผ์์ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ๋ณํํ ์ ์๋ค.