이전에도 언급하였듯, 아래 값중 하나를 할당하면 된다.
- AF_INET
- AF_INET6
- AF_LOCAL
struct sockaddr_in addr; addr.sin_family = AF_INET;
sin_port 멤버는 unsigned 16Bit, 즉 2Byte 크기이며, 이것은 short 자료형의 크기와 같다. 따라서, htons 함수를 이용해 포트번호를 채워주면 된다.
struct sockaddr_in addr;
addr.sin_port = htons([PORT_NUM]);
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에 대입해주어야 한다.
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 리턴
이 함수는 inet_addr이나 inet_aton 함수의 리턴값인 빅 엔디안으로 변환된 IP 주소(in_addr)를 사람이 보기 쉽게 x.x.x.x의 형태로 바꿔준다.
#include <arpa/inet.h>
char* inet_ntoa(struct in_addr adr);
// 성공시 변환된 문자열의 주소 값, 실패시 -1 리턴
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"));