listen의 호출 이후에 클라이언트의 연결 요청이 들어왔다면, 들어온 순서대로 연결 요청을 수락해야 한다.
listen을 통해 생성된 서버 소켓은 오로지 연결 요청만을 전담하여 수신하는 소켓이므로, 클라이언트와 데이터를 주고 받기 위해서는 별도의 연결 소켓이 필요하다. 이를 위해 accept를 사용한다.

accept을 사용하면 연결 요청 대기 큐에서 연결 요청 하나를 꺼내, 해당 클라이언트와의 통신을 위한 소켓을 생성 후 연결한 후에 해당 소켓의 파일 디스크립터를 반환한다.
#include <sys/socket.h>
int accept(int sock, struct sockaddr *addr, socklen_t *addrlen);- sock : 서버 소켓의 파일 디스크립터 전달
- addr : 연결 요청한 클라이언트의 주소 정보를 담을 변수의 주소 값 전달. 함수 호출이 완료되면 인자로 전달된 주소의 변수에는 클라이언트의 주소 정보가 채워진다.
- addrlen : 두 번째 매개변수 addr에 전달된 주소의 변수 크기를 바이트 단위로 전달. 단, 크기 정보를 변수에 저장한 다음에 변수의 주소 값을 전달한다. 그리고 함수 호출이 완료되면 크기정보로 채워져 있던 변수에는 클라이언트의 주소 정보 길이가 바이트 단위로 계산되어 채워진다.
- 성공 시 생성된 소켓의 파일 디스크립터, 실패 시 -1 반환
참고자료