미리 보고 오면 좋은 함수
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 |