[네트워크] 13. 소켓 프로그래밍 2 (비동기 통신 / 반복 서버 / 동시 동작 서버)

2025. 12. 11. 22:20·컴퓨터공학/네트워크

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

(1) 동기형(Blocking) 통신

 

  • 기본적으로 프로그램은 순차적으로 실행된다
  • 블로킹(Blocking)의 문제점: accept()나 recv() 같은 함수를 호출하면, 상대방이 연결하거나 데이터를 보낼 때까지 프로그램이 멈춘다.
  • 예시: 친구에게 메시지를 보내고 답장이 올 때까지 아무것도 못 하고 핸드폰만 쳐다보고 있는 상황. 답장이 안 오면 나는 메시지를 보낼 수도(send 불가), 다른 일을 할 수도 없다.

 

(2) 비동기형(Non-Blocking) 통신

  • recv 함수가 데이터를 기다리지 않고, 데이터가 없으면 즉시 리턴하게 만드는 방식.
  • O_NONBLOCK: 소켓에 이 속성(Flag)을 설정하면, 블로킹 함수였던 recv가 논블로킹으로 작동함.
  • 주의: 논블로킹으로 설정해야 하는 대상은 함수가 아니라 파일 기술자(File Descriptor, 소켓 번호)이다.

B와 C가 Non-Blocking이 되어야한다.

 


2. fcntl 함수

: 이미 열려있는 파일/소켓 등의 속성을 제어하는 함수이다.

 

[사용 방법]

 

  1. F_GETFL: 현재 속성을 먼저 읽음 (flags 변수에 저장).
  2. 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
'컴퓨터공학/네트워크' 카테고리의 다른 글
  • [네트워크] 15. HTTP, DNS, FTP, TFTP, 네트워크보안
  • [네트워크] 14. 세션 계층, 표현 계층, 응용 계층 (L5, L6, L7)
  • [네트워크] 12. 소켓 프로그래밍 1 (소켓 주소 / 핵심 함수 / TCP, UDP 서버 클라이언트 흐름)
  • [네트워크] 11. 전송 계층 (L4: 3-way handshake, TCP, UDP, RTP)
sophon
sophon
sophon 님의 블로그 입니다.
  • sophon
    sophon 님의 블로그
    sophon
    • 카테고리 (172) N
      • 컴퓨터공학 (36)
        • 데이터베이스 (19)
        • 네트워크 (15)
        • 기타 이슈 (2)
      • 프로젝트 (16)
        • Java (8)
        • Spring (4)
        • Docker (4)
      • 코딩테스트 (95) N
        • BOJ (74)
        • 프로그래머스 (7)
        • 프로그래머스 SQL (12) N
        • PS Snippets (2)
      • 🌱 잡담 (22)
        • 자격증 (7)
        • 좋은 시 모음 (12)
        • 책과 영화 (3)
        • 기록 (0)
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sophon
[네트워크] 13. 소켓 프로그래밍 2 (비동기 통신 / 반복 서버 / 동시 동작 서버)
상단으로

티스토리툴바