🏠 주소 정보
1. 프로토콜(IPv4, IPv6)
2. IP 주소
3. 포트 번호
주소를 저장하기 위한 2가지의 구조체가 있다.
SOCKADDR_IN 구조체: 개발자는 SOCKADDR_IN 구조체를 사용해 주소 정보 저장
SOCKADDR 구조체: 소켓에 주소 정보를 연결할 땐 SOCKADDR 구조체로 변환하여 사용
❗SOCKADDR 구조체는 사람이 사용하기에 불편한 형식이라 사용하기 편한 SOCKADDR_IN 구조체로 주소 저장
주소 정보를 등록하는 순서
1. sockaddr_in 구조체를 모두 0으로 초기화 ➡️ 0으로 초기화 시키지 않을 경우 sockaddr 구조체 변환할 때 오류
2. sockaddr_in 구조체 멤버에 값들을 저장
3. sockaddr_in 구조체를 sockaddr 구조체로 변환
SOCKADDR_IN 구조체
- 주소 정보를 입력할 때 사용
* SOCKADDR_IN 구조체로 주소 정보를 저장할 때 멤버 변수를 모두 0으로 초기화해야 한다.
struct sockaddr_in {
sin_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
}
struct in_addr {
unit32_t s_addr;
};
1) sa_family
프로토콜(IPv4, IPv6)
2) sin_port
포트번호
3) sin_addr > in_addr
IP 주소
sin_addr는 구조체로 멤버 변수인 in_addr 구조체의 s_addr에 저장해야 한다.
s_addr는 정수형이다.
문자열 IP를 네트워크 바이트로 변환해야 한다.
지정한 IP 주소가 있다면 inet_addr, inet_network, inet_aton, inet_pton 함수 중 선택하여 변환한다.
그러나 IP 주소를 지정하기가 귀찮다면 IP를 자동 할당시킬 수 있다.
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY) ➡️ IP 자동 할당
SOCKADDR 구조체
- 소켓에 주소 정보를 등록할 때는 sockaddr 구조체 사용하여 bind() 함수에 주소 정보 전달
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
1) sa_family
주소 체계를 나타내는 16비트 정수 값
프로토콜(IPv4, IPv6)
2) sa_data
주소 체계에서 사용할 주소 정보
IP 주소, Port 번호
IP 주소(4바이트)
127 | 0 | 0 | 1 |
Port 번호(2바이트)
80 | 80 |
남는 바이트(10바이트)
➡️ IP와 Port 정보가 더해서 6바이트밖에 안되는데 10바이트가 남는다. ➡️ 0으로 무조건 채운다 ➡️ 0으로 안 채우면 에러
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
'Network > Socket' 카테고리의 다른 글
[Linux Socket] Server - Listen() 함수/ Accept() 함수[3] (0) | 2023.05.11 |
---|---|
🔖IP 주소 변환 함수 (0) | 2023.05.09 |
[Linux Socket] Server - bind() 함수[2] (0) | 2023.05.04 |
🔖 SOCK_STREAM VS SOCK_DGAM (0) | 2023.05.04 |
[Linux Socket] Server - socket() 함수[1] (0) | 2023.05.03 |