내가 다음과와 WSASend 호출 (콜백 함수 않은 Windows I/O 완료 포트) 게시 말 : 나는 완료 포트에서 "write_done"알림을받을 때둘 이상의 버퍼가있는 WSASend() - 불완전한 완료 할 수 있습니까?
void send_data()
{
WSABUF wsaBuff[2];
wsaBuff[0].len = 20;
wsaBuff[1].len = 25;
WSASend(sock, &wsaBuff[0], 2, ......);
}
, 그 수를 wsaBuff [1] 것 wsaBuff [0]은 부분적으로 만 전송됩니다 (예 : 7 바이트).
Len입니까? 이 특정 질문에주의를 기울이십시오 - 단일 WSASend() 호출이고 여러 개가 아니므로 WSABUF 배열을 하나의 연속 버퍼로 취급해야합니다. 내 질문은 사실 전부입니다. – Poni
소켓의 송신 버퍼 크기를 0으로 설정하면 버퍼가 메모리에 잠기므로 잠긴 페이지 한도를 초과하면 ENOBUFS가 반환 될 수 있습니다. 마찬가지로 우리 중 어느 누구도 페이지가 아닌 정확한 풀 사용에 대해 관여하지 않습니다. 이 상황. 당신이 scatter/gather I/O를 사용한다는 사실은 실제로 IMHO와 관련이 없습니다. 또한 WSASend()에 대한 문서에서이 상황으로 인해 발생할 수있는 오류가 발생할 수 없다고 말하지 않기 때문에 발생할 수 있다고 가정해야하므로 오류가 발생할 수 있다고 가정해야합니다. –