파일 디스크립터(TCP/IP 측면)

Devkty·2025년 5월 5일

파일 디스크립터(TCP/IP 측면)

리눅스/유닉스 계열 OS에서 열린 파일, 소켓, 파이프 등의 리소스를 식별하기 위한 정수형 번호이다.

Ex)

  • 0: 표준 입력(stdin)
  • 1: 표준 출력(stdout)
  • 2: 표준 에러(stderr)

그 외의 3부터는 프로세스에서 새로 연 리소스 들이다.

UNIX 철학

UNIX 철학에는 ‘모든 것이 파일’이라는 원칙이 있습니다.

파일, 소켓 모두 내부적으로 커널 레벨에서 I/O 버퍼와 디스크럽터 테이블을 통해 이뤄집니다. 그래서 소켓도 파일처럼 read(), write(), close() 등의 시스템 콜을 사용할 수 있습니다.

해당되는 파일 디스크럽터를 TCP/IP 소켓과 연관지어서 설명하면 다음과 같습니다.

1. 서버 소켓 생성

int listenfd = socket(AF_INET, SOCK_STREAM, 0);
  • socket() 호출의 리턴 값이 파일디스크립터입니다.
    ex) listenfd == 3 이면, 3번 디스크립터가 TCP 연결을 수신 대기하는 소켓을 의미합니다.

2. 클라이언트 접속 누락

int connfd = accept(listenfd, ...);
  • connfd도 파일 디스크립터입니다. 클라이언트가 접속하면 새 디스크립터가 생성되어 해당 연결을 담당합니다.
  • connfd는 일반 파일처럼 read, write, close 등에 사용 가능합니다.

3. 데이터 송수신

read(connfd, buf, MAXLINE);
write(connfd, buf, n);
  • 마치 파일에서 읽고 쓰듯이, 소켓 디스크립터를 통해 네트워크 입출력을 수행합니다.

실생활 속 예시

  • 식당에서 대기표를 뽑으면 번호가 주어지듯, 커널이 소켓을 만들면 번호(디스크립터)를 줍니다.
  • 우리는 그 번호를 통해 데이터 송수신 창구(소켓)를 다루는 것입니다.

자세한 내용은 컴퓨터 시스템 10장 정리 내용을 참고해주세요.

profile
모든걸 기록하며 성장하고 싶은 개발자입니다. 현재 크래프톤 정글 8기를 수료하고 게임회사에서 일을 하고 있습니다.

0개의 댓글