<aside> 📌

먼저 기억할 세 가지

1. WSASend 송신 과정

send는 일반 송신 API이고, WSASend는 여러 WSABUF와 Overlapped 송신을 지원한다. 개념적인 송신 흐름은 다음과 같다.

애플리케이션 버퍼 (WSABUF)
  ↓ WSASend
Winsock / AFD / TCP-IP
  ├─ 필요에 따라 커널 버퍼링·복사 등 처리
  └─ TCP 전송 시점·재전송·흐름/혼잡 제어 결정
  ↓
NDIS (NET_BUFFER_LIST → NET_BUFFER → MDL 체인)
  ↓
미니포트 (DMA 매핑 / scatter-gather 디스크립터)
  ↓
NIC (DMA로 메모리에서 읽어 네트워크에 송신)

※ IOCP 완료 통지는 별도: 위 단계를 전부 마쳤다는 뜻은 아님.

근거: WSASend, NDIS Sending Network Data.

2. 버퍼링과 송신 완료

SO_SNDBUF

WSASend 반환값과 IOCP

결과 의미
반환값 0 Overlapped 송신이 즉시 완료됨
SOCKET_ERROR • WSA_IO_PENDING 요청 접수 성공, 나중에 완료됨
그 외 오류 요청 시작 실패, 해당 요청의 정상 완료 통지를 기대하지 않음

근거: WSASend 반환 및 완료 규칙, IOCP.

3. IOCP 송신 버퍼 수명 (실무 핵심)