Почему бы просто не начать загрузку с A (используя диапазон, если вы не хотите всего этого), и как только вы получите достаточно данных для передачи их на сайт B, вы создадите отдельный запрос с этими данными.Тем временем вы продолжаете загрузку из A в альтернативный буфер и т. Д.
Вы можете сделать это, используя два потока или даже в одном потоке, используя мультиинтерфейс libcurl.