Study/TCP_IP

[TCP_IP] 소켓 프로그래밍 _ 소켓의 생성 과정 (linux)

LKM0222 2022. 4. 13. 18:25
728x90
반응형

이 글은 윤성우의 열혈 TCP_IP프로그래밍 책을 공부하면서 쓰는 글 입니다.

 

소켓 프로그래밍은 전화기에 비유 할 수 있다. 

 

전화기는 송 수신이 한번에 이루어지는 양방향 통신구조이지만 소켓은 그렇지 않다.

 

일단 전화기에 해당하는 소켓을 생성하는 함수이다.

#include <sys/socket.h>
int socket(int domain, int type, int protocol);
-> 성공 시 파일 디스크립터, 실패 시 -1반환

전화를 구입하면 전화국 직원이 가설도 해주고 전화번호도 할당해 주지만, 소켓은 우리가 직접 가설을 해야한다.

bind함수는 소켓에 주소정보를 할당하는 함수이다.

#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
-> 성공 시 0, 실패 시 -1 반환

가설을 했으니 이제 전화를 받을 수 있는 상태로 만들어야 한다.

listen함수는 소켓이 연결요청 가능한 상태가 되게 해준다.

#include <sys/socket.h>
int listen(int sockfd, int backlog);
-> 성공 시 0, 실패 시 -1 반환

이제 전화벨이 울릴 수 있게 되었다. 

전화벨이 울리면 수화기를 들어야 한다.

마찬가지로 소켓도 누군가가 송수신을 위해 연결 요청을 해오면, accept함수로 요청을 수락해야 한다.

#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-> 성공 시 파일 디스크립터, 실패 시 -1 반환

 

따라서 기본적인 소켓의 생성 과정은 네 단계로 이루어져있다.

1. 소켓 생성       -> socket함수 호출

2. 주소 할당       -> bind 함수 호출

3. 요청상태 변경 -> listen함수 호출

4. 요청상태 수락 -> accept함수 호출

 

이제 전화를 걸 전화기가 있어야한다.

클라이언트에 주로 사용되는 함수이다.

#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
->성공 시 0, 실패 시 -1반환

 

728x90
반응형