728x90
주소 표현을 위한 구조체
- sockaddr 구조체 : 주소 표현을 위한 구조체
struct sockaddr {
u_short sa_family; // 주소 체계
char sa_data[14]; // Port number + IP address
};
- sockaddr_in 구조체와 in_addr 구조체
-> IPv4(AF_INET)의 주소 표현을 위한 구조체
-> sockaddr 구조체가 IPv4의 주소 정보를 표현하기에 불편하기 때문에 사용
-> sin_zero는 sockaddr과 크기를 맞추기 위해 사용
typedef struct sockaddr_in {
short sin_family; // 주소 체계
u_short sin_port; // 포트 번호
struct in_addr sin_addr; // 32비트 IP 주소
char sin_zero[8]; // 사용x
} SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;
typedef struct in_addr {
union {
struct { u_char s_b1, s_b2, s_b3, s_b4; } S_un_b;
struct { u_short s_w1, s_w2; } S_un_w;
u_long S_addr;
} S_un;
} IN_ADDR, *PIN_ADDR, *LPIN_ADDR;
#define s_addr S_un.S_addr // IPv4 사용
#define s_host S_un.S_un_b.s_b2
#define s_net S_un.S_un_b.s_b1
#define s_imp S_un.S_un_w.s_w2
#define s_impno S_un.S_un_b.s_b4
#define s_lh S_un.S_un_b.s_b3
- bind 함수의 두번째 인자는 struct sockaddr의 주소값이기 때문에 형변환하여 전달
SOCKET hServSock;
struct sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servAddr.sin_port=htons(atoi(argv[1]));
if(bind(hServSock, (struct sockaddr*) &servAddr, sizeof(servAddr))==SOCKET_ERROR)
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 03-4. 인터넷 주소의 초기화와 할당 (0) | 2021.02.09 |
---|---|
열혈 TCP/IP 03-3. 네트워크 바이트 순서와 인터넷 주소 변환 (0) | 2021.02.05 |
열혈 TCP/IP 03-1. 소켓에 할당되는 IP주소와 PORT번호 (0) | 2021.02.02 |
열혈 TCP/IP 02-1. 소켓의 프로토콜과 그에 따른 데이터 전송 특성 (0) | 2021.01.31 |
열혈 TCP/IP 1-3. 윈도우 기반 구현하기 (0) | 2021.01.31 |