lib: clear the easy handle's saved errno before transfer

- Clear data->state.os_errno before transfer.

- Explain the change in behavior in the CURLINFO_OS_ERRNO doc.

- Add to the CURLINFO_OS_ERRNO doc the list of libcurl network-related
  errors that may cause the errno to be saved.

data->state.os_errno is saved before libcurl returns a network-related
failure such as connection failure. It is accessible to the user via
CURLINFO_OS_ERRNO so they can get more information about the failure.

Prior to this change it wasn't cleared before transfer, so if a user
retrieved the saved errno it could be from a previous transfer. That is
because an errno is not always saved for network-related errors.

Closes https://github.com/curl/curl/pull/13574
This commit is contained in:
Jay Satiro 2024-05-10 03:19:16 -04:00
parent b7c7dffe35
commit 798a37b25e
3 changed files with 12 additions and 0 deletions

View file

@ -552,6 +552,8 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
if(data->set.errorbuffer)
data->set.errorbuffer[0] = 0;
data->state.os_errno = 0;
/* make the Curl_easy refer back to this multi handle - before Curl_expire()
is called. */
data->multi = multi;