소켓 인터페이스란 네트워크 어플리케이션을 만들기 위한 Unix I/O 함수들과 함께 사용되는 함수들의 집합
ex) localhost:80
connect
,bind
, accept
함수는 프로트콜에 특화된 소켓 주소 구조체를 가리키는 포인터 이다.
🎞소켓 인터페이스 기반 네트워크 응용 프로그램🎞
socket()
: 소켓(file descriptor) 생성하는 함수
bind()
: 소켓과 서버의 정보 연결하는 함수
listen()
: 어떤 컴퓨터로부터 요청이 와도 수락할 수 있게 대기 상태에 들어가도록 하는 함수
accept()
: 서버 소켓과 클라이언트를 연결하는 함수
connect()
: 서버에 연결 요청하는 함수, 서버가 바쁘면 대기열에 넣었다가 때가 되면 accept
getaddrinfo함수는 도메인 주소값을 IP주소값으로 변환할 떄 사용하는 함수
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int getaddrinfo(const char *host, // (ex) "www.example.com" or IP
const char *service, // (ex) "http" or port number
const struct addrinfo *hints,
struct addrinfo **result); // DNS서버로부터 받은 네트워크 주소 정보(IP)를 돌려주는 output 매개변수
//Returns: 0 if OK, nonzero error code on error
// 사용 후 메모리 해제(메모리 누수 방지)
void freeaddrinfo(struct addrinfo *result);
const char *gai_strerror(int errcode);
host에는 도메인 이름이나 정수형인 IP 주소를 넣을 수 있다. 호스트 이름을 주소로 변환하고 싶지 않은 경우 NULL을 넣으면 된다.
service에는 서비스 이름이나 포트번호를 넣으면 된다.
addrinfo 구조체
struct addrinfo {
int ai_flags; // 기본 동작을 더 수정하는 비트마스크
int ai_family; // AF_INET -> IPv4, AF_INET6 -> IPv6
int ai_socktype; // TCP 경우 SOCK_STREAM
int ai_protocol;
char *ai_canonname;
size_t ai_addrlen; // 소켓 주소 구조체의 크기
struct sockaddr *ai_addr; // 소켓 주소 구조체 가리킴
struct addrinfo *ai_next; // 다음 addrinfo구조체 가리킴
};