Winsock 함수가 중첩된 방식으로 호출되는 경우(WSAOVERLAPPED 구조 내에서 이벤트를 지정하거나 완료 루틴을 사용함) 작업이 즉시 완료될 수 있습니다. 예를 들어 데이터가 이미 수신되고 버퍼링된 경우 WSARecv()를 호출하면 WSARecv()가 NO_ERROR를 반환합니다. WSA_IO_PENDING에서 중첩된 함수가 실패하거나 즉시 성공하면 완료 이벤트가 항상 신호를 받게 되고 완료 루틴이 실행되도록 예약됩니다(지정된 경우). 완료 포트와 겹친 I/O의 경우 완료 알림이 완료 포트에 게시되어 서비스를 받을 수 있습니다. 마지막으로 플래그 매개 변수는 0, MSG_DONTROUTE 또는 MSG_OOB일 수 있습니다. 또는 플래그 매개 변수는 비트 또는 이러한 플래그 중 일부가 될 수 있습니다. MSG_DONTROUTE 플래그는 전송이 전송하는 패킷을 라우팅하지 않도록 전송을 알려줍니다. 이 요청을 무시하는 것은 기본 전송에 달려 있습니다(예: 전송 프로토콜이 이 옵션을 지원하지 않는 경우 무시됨). MSG_OOB 플래그는 데이터를 대역 밖으로 보내야 한다는 것을 의미합니다. 이 예제는 코드의 중첩된 I/O 처리 부분을 별도의 스레드로 이동하고 주 응용 프로그램 스레드가 추가 연결 요청을 서비스할 수 있도록 하여 두 개 이상의 소켓을 처리하도록 쉽게 확장할 수 있습니다. 2048바이트 미만으로 전송한 후 반환할 수 있습니다. ret 변수는 시스템이 데이터를 보내고 받을 각 소켓에 대해 일정량의 버퍼 공간을 할당하기 때문에 전송되는 바이트 수로 설정됩니다. 데이터를 보내는 경우 내부 버퍼는 데이터가 와이어에 배치될 수 있을 때까지 전송할 데이터를 보유합니다.

몇 가지 일반적인 상황이 이 문제를 일으킬 수 있습니다. 예를 들어, 방대한 양의 데이터를 전송하기만 하면 이러한 버퍼가 빠르게 채워집니다. 또한 TCP/IP의 경우 창 크기 슬라이딩 윈도우 데모(http://www2.rad.com/networks/2004/sliding_window/)라고 합니다. 수신 단은 이 창 크기를 조정하여 수신할 수 있는 데이터의 양을 나타냅니다. 수신기가 데이터로 넘쳐나는 경우 보류 중인 데이터를 따라잡기 위해 창 크기를 0으로 설정할 수 있습니다. 이렇게 하면 보낸 사람은 0보다 큰 새 창 크기를 받을 때까지 중지합니다. 송신 호출의 경우 1024바이트만 보유하는 버퍼 공간이 있을 수 있으며, 이 경우 나머지 1024바이트를 다시 제출해야 합니다. 다음 코드는 모든 바이트가 전송되도록 합니다: 매개 변수가 유효하지 않거나 소켓 형식과 일치하지 않습니다. 예를 들어 SD_SEND는 UNI_RECV 소켓 유형과 함께 사용됩니다.

분산 수집 지원은 원래 기능 recv 및 writev와 버클리 소켓에 도입 된 개념입니다. 이 기능은 Winsock 2 기능 WSARecv(), WSARecvFrom(), WSASend(및 WSASendTo)에서 사용할 수 있습니다. 매우 구체적인 방식으로 포맷된 데이터를 보내고 받는 응용 프로그램에 가장 유용합니다. 예를 들어 클라이언트에서 서버로의 메시지는 항상 일부 작업을 지정하는 고정 된 32 바이트 헤더로 구성되고 64 바이트 데이터 블록이 뒤따르고 16 바이트 트레일러로 종료 될 수 있습니다. 이 예제에서 WSASend()는 세 개의 메시지 유형에 해당하는 세 개의 WSABUF 구조의 배열로 호출할 수 있습니다.