C++ 有没有办法防止libcurl缓冲?

C++ 有没有办法防止libcurl缓冲?,c++,curl,libcurl,C++,Curl,Libcurl,我正在使用libcurl和CURLOPT_WRITEFUNCTION下载某个文件 我使用CURLOPT_BUFFERSIZE请求特定的缓冲区大小 当我的回调函数第一次被调用时,我得到了那么多字节,实际上下载了更多的数据 例如,如果我要求1024字节的数据,当我第一次得到它时,进程已经消耗了100K的数据(基于process explorer和类似工具。我可以在wireshark中看到连续的数据流和ACK),因此我假设它正在提前下载并缓冲数据 我在这里试图实现的是能够取消基于前几块数据的检索,而无

我正在使用libcurl和CURLOPT_WRITEFUNCTION下载某个文件

我使用CURLOPT_BUFFERSIZE请求特定的缓冲区大小

当我的回调函数第一次被调用时,我得到了那么多字节,实际上下载了更多的数据

例如,如果我要求1024字节的数据,当我第一次得到它时,进程已经消耗了100K的数据(基于process explorer和类似工具。我可以在wireshark中看到连续的数据流和ACK),因此我假设它正在提前下载并缓冲数据

我在这里试图实现的是能够取消基于前几块数据的检索,而无需下载任何不必要的内容

有没有办法防止这种缓冲,在我处理完当前数据块后才下载下一个数据块(或者至少不缓冲几十和几百KB)


我更希望解决方案与服务器无关,因此CURLOPT_范围在这里实际上不起作用。

涉及到几层缓冲——内核缓冲区、套接字缓冲区和libcurl的缓冲区。你真的不能做你想做的事。内核缓冲它想要的内容,而libcurl的缓冲区不会低于1024。您可以使用
CURLINFO\u ACTIVESOCKET
访问套接字,然后使用
setsockopt()
设置其缓冲区大小,但这在使用小型缓冲区时更具建议性。因此,您最好让系统缓冲所需内容,尽早取消,在下一次传输时,忽略您在上一次传输中收到的任何内容。
CURLOPT_RANGE
是我在回答中建议的解决方案,然后我注意到您说您不想使用它。不幸的是,我认为这是你唯一能做的事情。TCP就是不能按你想的方式工作。它不涉及接收者请求数据,发送者只是不断地发送。@Barmar您所描述的适用于HTTP,但是OP没有指定使用哪种协议。无论您设置的是小缓冲区还是大缓冲区,您的回调都会一直被调用,直到所有数据到达,或者您中止了回调中的操作。