mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-24 18:13:00 +01:00
This commit updates the MultiAdapter to account for connecitons being closed unexpectedly and then retried. When this occurs, curl attempts to rewind the stream before sending. Because we use a callback function to stream large payloads, curl fails to rewind the stream and fails the transaction without associating the correct error code. This commit checks if a transaction has a response before processing. If a transaction doesn't have a response, then we attempt to retry the request transparently (without emitting another set of before events, essentially doing exactly what curl would have done if it was possible to rewind the stream). If the request did not have a body, then an error event is emitted as it is a very weird error. If the request had a body but wasn't rewindable, then an error event is emitted. If the request had a body and a rewindable stream, then it is rewound and retried. This change also updates the MultiAdapter and BatchContext to transfer until the number of open handles in the BatchContext reaches 0. This removes some complexity from the main transfer loop that had to account for pending transactions. Closes #710