OS는 일반적으로 첫 번째 질문에 대해 쉬운 API 만 제공합니다. Qt는 이식 가능한 API이므로 OS의 버퍼로의 전송을 참조하는 것이 가장 좋습니다. 영수증을 받으려면 원격 응용 프로그램에서 보낸 것이 가장 좋습니다. 결국 원격지에서는 데이터를 확인할 수 있지만 원격에서는 OS 읽기 버퍼를 읽지 않습니다.
리모트 사이드가 당신을 영원히 차단하는 것을 피하려면, QIODevice::bytesWritten
신호를 기다렸다가 이벤트 루프로 돌아가서 다른 작업을 수행하거나 적절한 타임 아웃을 설정하십시오. 일반적으로 원격 측은 어느 정도 수준에서 당신을 항상 차단할 수 있습니다. 즉, 로컬 OS 버퍼를 채우는 것을 거부 할 수 있습니다. 쓰기는 Qt에서 OS로 전환되지 않습니다. 어떤 수준의 waitForBytesWritten()
에 있더라도 항상 차단 될 수 있습니다.
이와 같이 bytesWritten
과 waitForBytesWritten()
은 데이터 소스를 제한하는 데에만 사용해야합니다. 즉, 1G의 데이터를 모두 한 번에 전달하는 긴밀한 루프로 들어가면 버퍼링이 끝날 수 있습니다 프로세스가 진행되고 메모리가 부족합니다. bytesWritten
신호로 추가 읽기/쓰기를 트리거하면이 문제를 피할 수 있습니다.
영수증을 접수 할 필요가 없습니다. 내가 정말로 * 원하는 것은 클라이언트가 ACK를 보내기를 기다리면서 애플리케이션을 지연시킬 수있는 상황을 피하는 것이다. –
@ George : 답변 됨 업데이트 됨 :) – bdonlan