반응형

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()로 인해 생긴 소켓을

 

다 사용했으니 닫아주는(꺼주는) 역할을 한다.

 

-

 

다음 포스팅에서 클라이언트 측의 함수 호출 과정의 비유와 역할을 봐보자.

반응형

+ Recent posts