При использовании libcurl для chunked transfer получили проблему.
Примерная инициализация:
req_headers.Append( _T( "Expect:" ) ) ;
req_headers.Append( _T( "Transfer-Encoding: chunked" ) ) ;
req_headers.Append( _T( "Content-Type: application/binary-octet")) ;
curl_easy_setopt( m_CURLHandle, CURLOPT_HEADERFUNCTION, SReceiveHeaders ) ;
curl_easy_setopt( m_CURLHandle, CURLOPT_WRITEFUNCTION, SReceiveResponse );
curl_easy_setopt( m_CURLHandle, CURLOPT_READFUNCTION, SReadRequestBody ) ;
curl_easy_setopt( m_CURLHandle, CURLOPT_URL, full_url_utf8.c_ptr() );
curl_easy_setopt( m_CURLHandle, CURLOPT_POST, 1L );
Вызов:
CURLcode res = curl_easy_perform( m_CURLHandle ) ;
Курл начинает дергать SReadRequestBody для получения данных, в функции есть задержка для готовности данных, данные готовы выдаем, объем данных десятки и сотни гигабайт, все работает хорошо за исключением обработки HTTP респонса от сервера, он просто игнорируется
вернее раньше работал когда использовали .59 версию, а сейчас .61 просто игнорируется, причем HTTP response пришел и лежит во внутреннем буфере, но реакции нет. те мы сидим в curl_easy_perform и шлем данные серверу бесконечно.
Попытался в функции SReadRequestBody мониторить состояние m_CURLHandle контекста через паблик АПИ, но ничего не меняется по приходу HTTP response.
Может кто сталкивался с такой проблемой?