Echo Server Data Path

에코 서버는 수신 버퍼에서 읽고 송신 버퍼로 다시 쓴다

소켓 코드는 단순해 보여도, 실제 데이터는 커널 버퍼를 거치며 TCP는 메시지 경계가 없는 바이트 스트림으로 동작한다.

recv는 현재 받을 수 있는 바이트를 최대 bufsize만큼 가져온다.
send는 일부만 보낼 수 있으므로 반복 전송이 필요하다.
프로토콜에는 길이 prefix나 구분자 같은 framing이 필요하다.
C

Client

sendall(b"Hello, Socket!")

Kernel receive buffer TCP stream 패킷 경계가 아니라 바이트 순서만 애플리케이션에 보인다.
Hello , Socket!
Application loop recv → process → send_all 에코 서버는 읽은 바이트 수만큼 다시 쓰지만, send_all처럼 반복 전송해야 안전하다.
Protocol framing 실서비스는 메시지를 직접 정의한다 길이 4바이트 + payload, 줄바꿈 구분, 고정 헤더 같은 규칙을 둔다.
S

Server

recv(1024), send_all(...)

recv() == b"" 상대가 정상 종료해 FIN을 보낸 상태로 해석한다.
send() 반환값 요청한 길이보다 작을 수 있으므로 확인해야 한다.
blocking socket 데이터나 연결이 준비될 때까지 호출이 멈출 수 있다.