소켓
소켓은 프로세스간 통신을 위한 창구역할을 합니다. 즉, 프로세스가 데이터를 보내거나 수신하기 위해 사용하는 연결부이죠.
소켓은 프로토콜과 IP주소, 포트넘버로 정의됩니다.
다시말해 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로서, 서버소켓 클라이언트 소켓으로 구분될 수 있습니다.
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/02dcfb23-bfbf-4c22-acbb-fafcccded481/Untitled.png)
서버소켓
- 서버 소켓은 클라이언트 소켓의 연결요청을 대기하고, 연결요청이 오면 통신을 가능하게 합니다.
- 즉 실제 데이터 송수신이 일어나는 것은 클라이언트 소켓이죠.
- socket()함수를 이용하여 소켓을 생성
- bind()함수로 ip와 port번호를 설정하게 됩니다.
- listen()함수로 클라이언트의 접근요청에 수신 대기열을 만들어 클라이언트를 몇개 대기시킬 건지 결정하게 됩니다.
- accept()함수를 사용하여 클라이언트와 연결을 기다리게 됩니다.
클라이언트 소켓
실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓입니다.
- socket()함수로 가장 먼저 소켓을 연다
- connect()함수를 이용하여 통신할 서버의 설정된 ip와 port번호에 통신을 시도합니다.
- 통신 시도 시, 서버가 accept()함수를 이용하여 클라이언트의 소켓 디스크립터를 반환합니다.
- 이를 통해 클라이언트와 서버가 서로 read(), write()를 하며 통신합니다.