TCP 10/22

with MK·2020년 10월 23일
0

소켓 프로그래밍

목록 보기
9/13

TCP/IP
10월 22일
네트워크 프로그래밍과 소켓의 이해

  • 물리적으로 연결된 네트워크상에서 데이터 송수신에 사용할 수 있는 소프트웨어적 장치인 소켓을 운영체제 레벨에서 제공한다.
  • 소켓을 생성하는 함수
    #include <sys/socket.h>
    int socket(int domain, int type, int protocol);
    해당 함수는 성공 시 파일 디스크립터를 실패 시 -1을 반환한다.
  • 전화기에 전화번호가 할당되는 것처럼, 소켓의 경우 IP와 포트번호라는 소켓의 주소정보에 해당하는 것을 할당해야 한다.
    #include <sys/socket.h>
    int bind(int sockfd, struct sockaddr *maddr, socklen_t addrlen);
    해당 함수는 성공 시 0, 실패 시 -1을 반환한다.
  • 소켓이 연결요청이 가능한 상태가 되어야 한다.
    #include <sys/socket.h>
    int listen(int sockfd, int backlog);
    해당 함수는 성공 시 0, 실패 시 -1을 반환한다.
  • 위에서 listen함수를 통해 마치 전화기가 전화 케이블에 연결된 상태가 되고, 전화벨이 울리면 통화를 위해 수화기를 들어야 한다.
    #include <sys/socket.h>
    int accept(int sockfd, struct sockaddr addr, socklen_t addrlen);
    해당 함수는 성공 시 디스크립터, 실패 시 -1을 반환한다.
    해당 함수는 블로킹 함수로, 연결요청이 없는 상태에서 이 함수가 호출되면, 연결요청이 있을 때까지 함수는 반환하지 않는다.
  • 클라이언트의 경우 연결을 요청하는 기능이 필요하다.
    #include <sys/socket.h>
    int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
    해당 함수는 성공 시 0, 실패 시 -1을 반환한다.
  • 파일 디스크립터란? : 시스템으로부터 할당 받은 파일 또는 소켓에 부여된 정수를 의미한다. 0(std input), 1(std output), 2(std err)의 경우 미리 할당되어 있고, 새로운 파일 디스크립터를 할당 시 3부터 그 수가 시작된다. 운영체제가 파일을 쉽게 관리할 수 있도록 인덱인덱 붙이는 것 과 같다.
  • t로 끝나는 자료형 : size_t와 같은 자료형을 고전적인(primitive) 자료형이라고 한다. 일반적으로 sys/types.h 헤더파일에 typedef 선언을 통해서 정의되어 있다. 즉, 기존에 알고있던 자료형에 또 다른 이름을 붙여 놓은 것이다. 시간의 흐름에 따라 자료형의 표현 방식이 달라지기 떄문에 프로그램상에서 선택된 자료형의 변경이 요구되기도 한다. 이때 코드의 변경을 최소화하기 위해 해당 자료형을 사용한다. typedef 선언만 변경하여 컴파일을 하면 되기 떄문이다. 그래서 일반적으로 프로젝트를 진행할 때에는 기본 자료형 이름에 별도의 이름을 부여하기 위해 많은 양의 typedef 선언이 추가된다. 그리고 이렇게 프로그러머에 의해 정의되는 자료형 이름과의 구분을 위해, 시스템에서 정의하는 자료형의 이름에는 _t가 붙어있다.

0개의 댓글