더북(TheBook)

3.3 블로킹과 소켓 버퍼

 

 

앞서 send(data)를 호출할 경우 즉시 리턴한다고 이야기했습니다. 상대방에게 송신이 완료될 때까지 블로킹이 걸리지 않고 말이죠. 게다가 data는 상대방이 아직 수신하지 않았을 수도 있다고 말했습니다. 이 현상을 이해하려면 소켓 버퍼를 알아야 합니다.

소켓 각각은 송신 버퍼(send buffer)와 수신 버퍼(receive buffer)를 하나씩 가지고 있습니다. 먼저 송신 버퍼부터 설명하자면, 일련의 바이트 배열(byte array)이라고 보면 됩니다. 송신 버퍼의 크기는 고정되어 있으나, 마음대로 크기를 변경할 수 있습니다.

송신 버퍼는 큐와 마찬가지로 FIFO(First-In First-Out, 선입선출) 형태로 작동합니다. 여러분이 send(data)를 호출하면 data는 일단 송신 버퍼에 채워집니다. 송신 버퍼에 채워진 data는 잠시 후 통신 선로를 통해 점차적으로 빠져나갑니다. 따라서 송신 버퍼는 뭔가가 채워지더라도 곧 빈 상태가 됩니다.

아무래도 단계별로 예시를 들어 설명하는 것이 좋겠습니다. 송신 버퍼 크기가 5바이트밖에 안 되는 소켓이 있다고 합시다.

p150_1

▲ 그림 3-2 크기가 5바이트인 송신 버퍼

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.