[Network] recv()

junykim·2025년 1월 10일

recv() 함수의 동작 원리블로킹 상태에서 리턴 조건
수신 버퍼 크기 초과:
수신 버퍼에 데이터가 recv() 호출 시 지정한 버퍼 크기 이상 채워진 경우.
app의 send 단위로 리턴:
지정된 버퍼 크기보다 적은 데이터가 수신된 경우, 애플리케이션에서 send()로 전송한 단위로 리턴.
이유: TCP 세그먼트 단위로 데이터를 반환해도 의미 없는 데이터가 될 수 있으므로, 의미 있는 단위(app의 send 단위)로 반환.
PSH(Control Bit):
PSH 비트가 붙는 시점:
애플리케이션이 데이터를 send()로 보낼 때, 데이터 단위의 끝에 PSH 비트가 설정된다.
PSH 비트와 recv():
PSH 비트가 수신되면, 블로킹 상태의 recv()는 즉시 리턴한다.
비블로킹 상태의 동작
비블로킹 모드에서 recv() 호출:
수신 버퍼에 데이터가 하나라도 들어와 있으면 즉시 리턴.
수신 버퍼가 비어 있는 경우, EWOULDBLOCK 또는 EAGAIN 오류를 반환.
수신 버퍼를 거치지 않는 경우
수신된 데이터가 바로 애플리케이션 버퍼로 복사된다면, 커널 단계에서 처리되며 빠르게 리턴한다. 이는 이후 Overlapped I/O에서 다루는 개념과 연관된다.

0개의 댓글