Server 측 함수 선언 과정
-
-
참고로 위의 함수들을 사용하기 위해서
헤더 파일인 <sys/socket.h>, <fcntl.h>, <sys/types.h>, <sys.stat.h>을(를) 포함해줘야 한다.
그리고 함수 원형에 대한 설명은 나중에 자세히 설명한다.
-
Server 측의 함수 선언 과정의 비유와 역할을 보면,
↓
socket(int domain, int type, int protocol);
(성공 시 파일 디스크립터 부여, 실패 시 -1 반환)
자신의 집에 전화기를 새로 장만한다.
즉, 컴퓨터들끼리 통신하기 위해서 맨 처음 호출하는 함수이자,
서버 또는 클라이언트 자기 자신만의 전용적인 소프트웨어적 전화기를 장만하는 역할을 한다.
↓
bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
(성공 시 0, 실패 시 -1 반환)
새로 장만한 전화기에 전화번호를 부여받는다.
즉, socket()를 호출해서 생성한 소켓에 컴퓨터에서의 전화번호와 같은 역할인
IP와 Port 번호를 부여해주는 역할을 한다.
↓
listen(int sockfd, int backlog);
(성공 시 0, 실패 시 -1 반환)
이 함수는 서버 측에서만 사용하는 함수이다.
이제 새로 장만한 전화기에 전화번호를 부여받았으니
다른 사람으로부터 전화 연결이 가능하도록 내 전화기를 대기 모드로 놔둬야 한다.
대기 모드는 전화기가 벨이 울리고 있는 상황이다.
즉, IP와 Port 번호가 부여된 소켓을 클라이언트가 접속 요청을 보낼 수 있도록,
대기 모드로 두는 역할을 한다.
↓
accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
(성공 시 파일 디스크립터 부여, 실패 시 -1 반환)
이 함수도 위의 listen함수와 같이 서버 측에서만 사용 가능한 함수이다.
벨이 울리고 있는 전화기를 받아야 한다.
즉, 소켓이 listen()의 호출로 클라이언트의 요청을 잠시 보유하고 있는데,
이 요청을 수락하여 진짜로 서버와 클라이언트가 연결되도록 해주는 역할을 한다.
↓
read(int fd, void *buf, size_t nbytes);
(성공 시 받은 바이트 수[단 파일의 끝을 만나면 0], 실패 시 -1 반환)
write(int fd, const void *buf, size_t nbytes);
(성공 시 전달한 바이트 수, 실패 시 -1 반환)
전화가 서로 연결되면 이제 서로 말을 주고받아야 한다.
즉, 클라이언트로부터 데이터를 받거나 보내거나 하는 역할을 한다.
↓
close(int fd);
(성공 시 0, 실패 시 -1 반환)
전화기(수화기)를 내려놓음으로써 전화를 끊는다.
즉, 컴퓨터들끼리 통신을 위해서 맨 처음 호출한 socket()로 인해 생긴 소켓을
다 사용했으니 닫아주는(꺼주는) 역할을 한다.
-
다음 포스팅에서 클라이언트 측의 함수 호출 과정의 비유와 역할을 봐보자.
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스 기반 파일 조작) 저 수준 파일 입출력과 파일 디스크립터 (0) | 2021.02.02 |
---|---|
(리눅스) 클라이언트[client] 프로그램 구현 (0) | 2021.02.02 |
(리눅스) 서버[server] 프로그램 구현 (0) | 2021.02.01 |
(리눅스)클라이언트 측 함수 선언 과정의 비유와 역할 (0) | 2021.02.01 |
네트워크 프로그래밍(소켓 프로그래밍) 서버와 클라이언트의 함수 선언 과정 (0) | 2021.02.01 |