[게임 서버] 3.3 블로킹과 소켓 버퍼

게시:     수정

카테고리:

태그:

📦 3. 소켓 프로그래밍

👉🏻 항목 3: 블로킹과 소켓 버퍼

📦 소켓 버퍼의 구조

기본 개념:

  • 소켓 각각은 송신 버퍼수신 버퍼를 가진다

📤 송신 버퍼(Send Buffer)

특징:

1. 데이터 구조:

  • 바이트 배열을 가진다

2. 크기 조절:

  • 버퍼의 크기는 고정되어 있지만, 크기를 마음대로 변경이 가능하다

3. 작동 방식:

  • FIFO(First In First Out) 형태로 작동한다
  • 사용자가 송신 버퍼에 push()하고, 운영체제가 pop()한다

4. 데이터 처리:

  • 운영체제는 송신 버퍼에 데이터가 있다면 Pop한다

5. 블로킹 조건:

  • 송신 버퍼가 꽉 차면 빈 공간이 생길 때까지 블로킹된다

💻 송신 버퍼 동작 예시

main() {
	s = socket(TCP); // 1
	s.bind(any_port); // 2
	s.connect("55.66.77.88:5959"); // 3
	s.send("hello"); // 4
	s.close(); // 5
}

s.send("hello"); 분석:

  • 송신 버퍼는 기본적으로 수천 바이트를 담을 수 있기에, 즉시 리턴된다

🧐 정리

  • 모든 소켓은 송신 버퍼와 수신 버퍼를 각각 가지고 있다
  • 송신 버퍼는 FIFO 방식으로 동작하며, 크기를 조절할 수 있다
  • 운영체제가 송신 버퍼의 데이터를 자동으로 Pop하여 전송한다
  • 송신 버퍼가 가득 차면 빈 공간이 생길 때까지 send() 함수가 블로킹된다
  • 일반적인 경우 송신 버퍼 크기가 충분하여 send() 함수는 즉시 리턴된다

GameServer 카테고리 내 다른 글 보러가기

댓글남기기