[네트워크] 소켓 인터페이스

developer_jennifer·2023년 5월 25일
0

크래프톤 정글

목록 보기
15/29

소켓 인터페이스

소켓 인터페이스란 네트워크 어플리케이션을 만들기 위한 Unix I/O 함수들과 함께 사용되는 함수들의 집합

  • 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가진다
  • address:port 형식으로 나타낸다.
  • 소켓은 모든 운영체제에서 지원한다.
  • 데이터를 주고 받기 위해서 소켓 디스크립터라는 파일 시스템을 사용한다.

ex) localhost:80

소켓 주소 구조체

connect,bind, accept 함수는 프로트콜에 특화된 소켓 주소 구조체를 가리키는 포인터 이다.

🎞소켓 인터페이스 기반 네트워크 응용 프로그램🎞

socket() : 소켓(file descriptor) 생성하는 함수
bind() : 소켓과 서버의 정보 연결하는 함수
listen() : 어떤 컴퓨터로부터 요청이 와도 수락할 수 있게 대기 상태에 들어가도록 하는 함수
accept() : 서버 소켓과 클라이언트를 연결하는 함수
connect() : 서버에 연결 요청하는 함수, 서버가 바쁘면 대기열에 넣었다가 때가 되면 accept

getaddrinfo 함수

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구조체 가리킴
};
profile
블로그 이전합니다 -> https://heekyoung2000.tistory.com/

0개의 댓글

관련 채용 정보