Socket API
운영체제에서 제공하는 프로세스 간 통신을 위한 인터페이스.
TCP 기반 소켓 : 소켓 스트림 (웹 서버는 TCP 기반이라서 소켓 스트림 사용)
UDP 기반 소켓 : 소켓 데이터 그램
TCP Server Socket
socket() -> 소켓을 만듦
bind() -> 소켓을 어떤 포트에 연결할지 (ex. HTTP는 80번에 bind)
listen() -> 최대 몇 개까지 요청 받을 건지 지정
accept() -> 클라이언트의 요청을 들을 준비 -> 실제로 연결되면 클라이언트의 IP와 포트 번호가 저장됨
여기까지 한 후 서버는 blocked되어 있음.
TCP Client Socket
socket() -> 소켓을 만듦
connect() -> 방금 만든 클라이언트 소켓을 서버의 소켓과 연결
클라이언트 소켓은 굳이 bind 해주지 않아도 됨.
이렇게 하면 클라이언트 소켓과 서버 소켓이 논리적으로 연결됨.
소켓에다가 메세지를 쓰고 소켓으로부터 메세지를 읽을 수 있음.
다 끝나면 close()해줘야 해당 소켓을 다른 프로세스에서 쓸 수 있음
cf) UDP 소켓은 생성하고 그냥 바로 보냄.
실제로 웹 브라우저에서 Web Client가 HTTP Request를 Web Server에 보내는 작업은 TCP 소켓에다가 읽고 쓰는 작업을 통해 이루어짐.
웹 서버는 어떤 데이터를 요청했는지 파싱해서 그걸 response에 담아서 보내줌.