본문 바로가기

정글캠프-WIL/C언어

[C언어] - accept() 함수


미리 보고 오면 좋은 함수

[C언어] - socket() 함수

[C언어] - bind() 함수

[C언어] - listen() 함수


accept() 함수란?
클라이언트의 연결 요청을 실제로 받아들이는 함수
"연결 소켓 중 하나를 꺼내서 실제 연결을 생성"

Why Used?

socket() -> bind() -> listen() -> accept()

소켓 생성 후 IP + PORT를 지정하고 연결 요청 대기 상태로 변경 후 실제 연결을 생성 (클라이언트와 통신 시작)

함수원형

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
매개변수 설명
sockfd socket()으로 생성한 소켓 파일 디스크립터 (listen 까지 완료된 상태)
addr 클라이언트의 주소 정보를 저장할 구조체
addrlen addr의 크기

- 개념

accept()는 기존 소켓을 사용하는 것이 아니라 새로운 소켓을 생성

listen용 소켓 (server fd)
        ↓
   accept()
        ↓
새로운 소켓 (client fd)

 

 

서버 소켓 (listen용)
 ├─ 클라이언트 A → 새로운 fd
 ├─ 클라이언트 B → 새로운 fd
 └─ 클라이언트 C → 새로운 fd
 
 이렇게 생성하므로써 각 클라이언트마다 독립적인 통신이 가능해진다.
listen() 이후엔 내부에 큐가 존재하고 accept()는 이 큐에서 하나 꺼내는 역할

return (반환값)

int connfd = accept(...);
의미
새로운 소켓 fd 클라이언트와 통신용
-1 에러

헤더 파일

#include <sys/socket.h>

사용 예시

int server_fd = socket(AF_INET, SOCK_STREAM, 0);

bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr));

listen(server_fd, 5);

struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);

int client_fd = accept(server_fd,
                       (struct sockaddr*)&client_addr,
                       &client_len);

 

'정글캠프-WIL > C언어' 카테고리의 다른 글

[C언어] - va_list 자료형  (1) 2026.04.25
[C언어] - connect() 함수  (0) 2026.04.23
[C언어] - listen() 함수  (0) 2026.04.23
[C언어] - bind() 함수  (0) 2026.04.23
[C언어] - socket() 함수  (0) 2026.04.23