네트워크를 통해 데이터를 주고 받는 종착점을 제공하는 소프트웨어 구조
클라이언트와 서버에 소켓 생성 socket()
(fd 반환)
⇒ 클라이언트가 서버를 찾을 수 있도록 사용할 주소 설정 bind()
⇒ 서버 프로세스의 소켓이 클라이언트 요청 대기 listen()
⇒ 클라이언트가 소켓을 통해 서버에 연결 connect()
accept()
⇒ 서버가 클라이언트의 요청을 수행한 후 응답 송신 send()
recv()
⇒ 소켓이 획득한 시스템 자원 해제 close()
accept()
까지가 준비 단계
⇒ 여기까지 하면 접속 요청이 왔을 때 대기하고 있다가 바로 접속을 받을 수 있음
⇒ 접속이 들어오면 접속 대기 소켓이 정보를 복사한 새로운 소켓을 만듦
⇒ 새로운 소켓은 클라이언트 하나와 연결되어 필요한 동작을 처리
⇒ 기존의 소켓은 다시 접속 대기 상태RFC 147 - Definition of a socket
what is blocking and non-blocking web server, what difference between both?
fcntl()
을 이용하면 지정한 fd를 논블로킹으로 변경할 수 있음TCP Socket - Blocking / Non-Blocking
블로킹, 논블로킹 소켓 프로그래밍 예시 코드