소켓 프로그래밍 1
소켓 프로그래밍 개요 및 소켓 프로그래밍의 주요 함수
소켓 프로그래밍 1
소켓 프로그래밍
소켓은 7계층에서 4계층의 기능을 활용하기 위한 API이다. 즉, 프로그래밍 언어로 전송 계층의 기능들을 쉽게 이용할 수 있게 해주는 도우미라고 생각하면 된다. 소켓 프로그래밍에서 사용되는 함수에는 어떤 것들이 있는지 살펴보자.
소켓 함수
1
socket();
소켓을 생성하는 함수로 정수형의 socket descriptor를 반환한다. socket descriptor는 통신을 위해 사용된다.
1
bind();
socket() 함수를 통해 생성된 socket descriptor에 주소를 부여해 준다. 즉, 소켓 기술자에 주소를 매핑해 주기 위해 사용된다.
1
listen();
소켓을 활성화하는 함수이다. 클라이언트의 접속을 받을 상태가 되는 것으로 연결형 서비스에서만 사용한다.
1
accept();
클라이언트의 connect 요청을 받기 위한 함수로, 특정 클라이언트와 1 : 1 통신을 위한 전용의 소켓 기술자가 반환된다.
1
connect();
클라이언트 프로세스가 서버 프로세스에 연결 요청을 할 때 사용하는 함수이다. 클라이언트는 통신을 위해서 서버에 대한 정보를 알고 있어야 한다.
accept와 connect의 관계
동작 흐름
- 서버가 accept()를 호출하고 blocking 상태가 된다. (accept는 기본적으로 blocking 상태로 동작한다.)
- 클라이언트가 connect()를 호출 (connect의 매개 변수로 서버의 정보가 입력된다.)
- blocking 상태의 서버가 깨어나면서 새로운 소켓이 생성되고, 서버는 해당 소켓을 활용해 클라이언트와 통신을 수행한다. (accept 함수는 클라이언트와의 통신을 위한 전용 소켓을 반환한다.)
정리
- accept는 서버에서 호출하는 함수이다.
- connect는 클라이언트에서 호출하는 함수이다.
- 서버는 accept를 호출하고 먼저 기다려야 하고, 이후 클라이언트가 connect 호출해야 한다.
- accept가 호출되기 전에 클라이언트가 connect를 호출하게 되면 에러가 발생한다.
1
2
send();
recv();
메시지를 주고받을 때 사용하는 함수이다. TCP는 3-way Handshake를 통해 연결이 수립된 상태로 통신을 진행함으로 send/recv를 사용한다. UDP의 경우에는 연결을 수립하지 않은 상태에서 통신함으로 누구로부터 메시지를 받는지, 누구에게 메시지를 전송하는지 명시해야 하므로 sendto/recvfrom 함수를 통해 메시지를 주고받는다.
This post is licensed under CC BY 4.0 by the author.