1. 동기형(Blocking) vs 비동기형(Non-blocking)
(1) 동기형(Blocking) 통신

- 기본적으로 프로그램은 순차적으로 실행된다
- 블로킹(Blocking)의 문제점: accept()나 recv() 같은 함수를 호출하면, 상대방이 연결하거나 데이터를 보낼 때까지 프로그램이 멈춘다.
- 예시: 친구에게 메시지를 보내고 답장이 올 때까지 아무것도 못 하고 핸드폰만 쳐다보고 있는 상황. 답장이 안 오면 나는 메시지를 보낼 수도(send 불가), 다른 일을 할 수도 없다.
(2) 비동기형(Non-Blocking) 통신
- recv 함수가 데이터를 기다리지 않고, 데이터가 없으면 즉시 리턴하게 만드는 방식.
- O_NONBLOCK: 소켓에 이 속성(Flag)을 설정하면, 블로킹 함수였던 recv가 논블로킹으로 작동함.
- 주의: 논블로킹으로 설정해야 하는 대상은 함수가 아니라 파일 기술자(File Descriptor, 소켓 번호)이다.

2. fcntl 함수
: 이미 열려있는 파일/소켓 등의 속성을 제어하는 함수이다.
[사용 방법]

- F_GETFL: 현재 속성을 먼저 읽음 (flags 변수에 저장).
- F_SETFL: 기존 속성에 O_NONBLOCK을 OR 연산(|)으로 추가하여 다시 설정
3. 반복 서버와 동시 동작 서버
[서버와 클라이언트 정의]
- 서버(Server): 서비스를 제공하는 프로그램. 보통 데몬(Daemon) 프로세스로 불리며, 부팅 직후 실행되어 종료 전까지 계속 떠 있는 프로그램이다. TCP 통신에서는 accept를 호출하고 기다리는 쪽이 서버(데몬)이다.
- 클라이언트(Client): 서비스를 요청하는 프로그램. TCP 통신에서는 connect를 호출하는 쪽이 클라이언트이다.
(1) 반복 서버 (Iterative Server)

- 방식: 서버(데몬) 프로세스가 혼자서 모든 클라이언트를 순서대로(차례로) 처리
- 특징: accept로 접속을 받고, send/recv로 서비스를 제공하는 것을 하나의 프로세스가 다 하게됨.
- 단점: 한 클라이언트를 처리하는 동안(서비스 중) 다른 클라이언트의 요청은 대기 큐에서 하염없이 기다려야 한다. 앞 사람 용무가 끝나야 내 차례가 오는 구조
(2) 동시 동작 서버 (Concurrent Server)
- 방식: 접속을 받는 프로세스와 서비스를 제공하는 프로세스를 분리한다.
- 구현: fork 함수 등을 이용해 자식 프로세스를 만들어, 자식에게 "네가 저 손님(클라이언트) 담당해"라고 넘겨주고, 본인은 다시 문지기 역할(accept)로 돌아오는 구조.
'컴퓨터공학 > 네트워크' 카테고리의 다른 글
| [네트워크] 15. HTTP, DNS, FTP, TFTP, 네트워크보안 (0) | 2025.12.12 |
|---|---|
| [네트워크] 14. 세션 계층, 표현 계층, 응용 계층 (L5, L6, L7) (0) | 2025.12.12 |
| [네트워크] 12. 소켓 프로그래밍 1 (소켓 주소 / 핵심 함수 / TCP, UDP 서버 클라이언트 흐름) (0) | 2025.12.11 |
| [네트워크] 11. 전송 계층 (L4: 3-way handshake, TCP, UDP, RTP) (0) | 2025.12.10 |
| [네트워크] 10. 네트워크 계층 2 (L3: 라우터, LPM, 버퍼링, IPv6, SDN) (0) | 2025.12.10 |