sockaddr_in 채우기

Benedictus Park·2022년 12월 15일
0

TCP/IP

목록 보기
6/11
post-thumbnail

1. sin_family

이전에도 언급하였듯, 아래 값중 하나를 할당하면 된다.

  • AF_INET
  • AF_INET6
  • AF_LOCAL
struct sockaddr_in addr;
addr.sin_family = AF_INET;

2. sin_port(포트 정보)

sin_port 멤버는 unsigned 16Bit, 즉 2Byte 크기이며, 이것은 short 자료형의 크기와 같다. 따라서, htons 함수를 이용해 포트번호를 채워주면 된다.

struct sockaddr_in addr;
addr.sin_port = htons([PORT_NUM]);

3. sin_addr(IP주소 정보)

3-1. inet_addr

sin_addr 멤버는 unsigned 32bit, 즉 4byte 크기이다. 이것은 inet_addr 함수를 이용해 채워주면 된다. 인자에는 IP주소 문자열을 넣어주면 된다.

#include <arpa/inet.h>
in_addr_t inet_addr(const char *string);
// 성공시 빅 엔디안으로 변환된 4Byte 정수 값, 실패시 INADDR_NONE 리턴

inet_addr 함수를 사용하는 경우, 리턴 값을 sin_addr에 대입해주어야 한다.

3-2. inet_aton

inet_aton 함수는 in_addr형 데이터의 포인터를 두 번째 인자로 받아 빅 엔디안으로 변환된 IP 주소를 in_addr에 저장한다. 첫 번째 인자에는 inet_addr의 경우와 동일하게 IP주소 문자열을 넣어주면 된다.

#include <arpa/inet.h>
int inet_aton(const char *string, struct in_addr *addr);
// 성공시 1, 실패시 0 리턴

3-3. inet_ntoa

이 함수는 inet_addr이나 inet_aton 함수의 리턴값인 빅 엔디안으로 변환된 IP 주소(in_addr)를 사람이 보기 쉽게 x.x.x.x의 형태로 바꿔준다.

#include <arpa/inet.h>
char* inet_ntoa(struct in_addr adr);
// 성공시 변환된 문자열의 주소 값, 실패시 -1 리턴

4. 주소정보 초기화 예제

struct sockaddr_in addr;

memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
inet_aton("220.21.4.0", &addr.sin_addr);
addr.sin_port = htons(atoi("4444"));

0개의 댓글