[게임 서버] 3.3 블로킹과 소켓 버퍼
카테고리: GameServer
태그: GameServer
📦 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()함수는 즉시 리턴된다
댓글남기기