이번에는 소켓의 수신 버퍼를 알아봅시다. 수신 버퍼는 기본적으로 송신 버퍼와 많은 부분이 비슷합니다. 단지 송신 버퍼와 수신 버퍼의 작동 순서가 거꾸로 된 점을 제외하고요. 송신 버퍼에는 사용자가 push()를 하고 운영체제가 pop()을 합니다. 수신 버퍼에는 운영체제가 push()를 하고 사용자가 pop()을 합니다.
수신 버퍼 안에는 데이터가 수신되는 것이 있을 때마다 계속해서 채워 줍니다. 즉, 수신 버퍼를 방치하면 결국 꽉 차게 됩니다. 꽉 차면 더 이상 데이터를 받지 않습니다.
사용자는 소켓에서 데이터를 수신하는 함수를 호출하여 수신 버퍼에서 이미 수신된 데이터를 꺼낼 수 있습니다. 수신 버퍼가 완전히 비어 있으면 데이터를 수신하는 함수는 블로킹이 일어납니다. 송신 버퍼가 완전히 차면 데이터를 송신하는 함수는 블로킹이 일어난다는 점과는 완전히 반대죠.