diff options
author | Michael Kaufmann <mail@michael-kaufmann.ch> | 2016-12-18 12:51:48 +0100 |
---|---|---|
committer | Michael Kaufmann <mail@michael-kaufmann.ch> | 2016-12-18 12:56:23 +0100 |
commit | afff64dbcde9cf45956f5557a8270b21c0e93dd5 (patch) | |
tree | fb610f970b9bf214d46877d8fb7555653eaca216 /docs/libcurl | |
parent | 82245eaa56c368f6b6b9abf4de63e7d6fb786f71 (diff) | |
download | curl-afff64dbcde9cf45956f5557a8270b21c0e93dd5.tar.gz |
curl_easy_recv: Improve documentation and example program
Follow-up to 82245ea: Fix the example program sendrecv.c (handle
CURLE_AGAIN, handle incomplete send). Improve the documentation
for curl_easy_recv() and curl_easy_send().
Reviewed-by: Frank Meier
Assisted-by: Jay Satiro
See https://github.com/curl/curl/pull/1134
Diffstat (limited to 'docs/libcurl')
-rw-r--r-- | docs/libcurl/curl_easy_recv.3 | 29 | ||||
-rw-r--r-- | docs/libcurl/curl_easy_send.3 | 23 | ||||
-rw-r--r-- | docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 | 1 |
3 files changed, 35 insertions, 18 deletions
diff --git a/docs/libcurl/curl_easy_recv.3 b/docs/libcurl/curl_easy_recv.3 index 3560cc511..7a812dd00 100644 --- a/docs/libcurl/curl_easy_recv.3 +++ b/docs/libcurl/curl_easy_recv.3 @@ -46,12 +46,21 @@ calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that \fIcurl_easy_recv(3)\fP does not work on connections that were created without this option. -You must ensure that the socket has data to read before calling -\fIcurl_easy_recv(3)\fP, otherwise the call will return \fBCURLE_AGAIN\fP - -the socket is used in non-blocking mode internally. Use -\fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP to obtain the -socket; use your operating system facilities like \fIselect(2)\fP to check if -it has any data you can read. +The call will return \fBCURLE_AGAIN\fP if there is no data to read - the +socket is used in non-blocking mode internally. When \fBCURLE_AGAIN\fP is +returned, use your operating system facilities like \fIselect(2)\fP to wait +for data. The socket may be obtained using \fIcurl_easy_getinfo(3)\fP with +\fICURLINFO_ACTIVESOCKET(3)\fP. + +Wait on the socket only if \fIcurl_easy_recv(3)\fP returns \fBCURLE_AGAIN\fP. +The reason for this is libcurl or the SSL library may internally cache some +data, therefore you should call \fIcurl_easy_recv(3)\fP until all data is +read which would include any cached data. + +Furthermore if you wait on the socket and it tells you there is data to read, +\fIcurl_easy_recv(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was +read was for internal SSL processing, and no other data is available. + .SH AVAILABILITY Added in 7.18.2. .SH RETURN VALUE @@ -60,13 +69,13 @@ On success, returns \fBCURLE_OK\fP, stores the received data into On failure, returns the appropriate error code. -If there is no data to read, the function returns \fBCURLE_AGAIN\fP. Use your -operating system facilities to wait until the data is ready, and retry. +The function may return \fBCURLE_AGAIN\fP. In this case, use your operating +system facilities to wait until data can be read, and retry. -Reading exactly 0 bytes would indicate a closed connection. +Reading exactly 0 bytes indicates a closed connection. If there's no socket available to use from the previous transfer, this function -returns CURLE_UNSUPPORTED_PROTOCOL. +returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP. .SH EXAMPLE See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example. .SH "SEE ALSO" diff --git a/docs/libcurl/curl_easy_send.3 b/docs/libcurl/curl_easy_send.3 index 2a7443985..47976f391 100644 --- a/docs/libcurl/curl_easy_send.3 +++ b/docs/libcurl/curl_easy_send.3 @@ -40,16 +40,20 @@ connection set-up. The variable \fBn\fP points to will receive the number of sent bytes. To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before -calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform()\fP. Note that +calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that \fIcurl_easy_send(3)\fP will not work on connections that were created without this option. -You must ensure that the socket is writable before calling -\fIcurl_easy_send(3)\fP, otherwise the call will return \fBCURLE_AGAIN\fP - -the socket is used in non-blocking mode internally. Use -\fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP to obtain the -socket; use your operating system facilities like \fIselect(2)\fP to check if -it can be written to. +The call will return \fBCURLE_AGAIN\fP if it's not possible to send data right +now - the socket is used in non-blocking mode internally. When +\fBCURLE_AGAIN\fP is returned, use your operating system facilities like +\fIselect(2)\fP to wait until the socket is writable. The socket may be +obtained using \fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP. + +Furthermore if you wait on the socket and it tells you it's writable, +\fIcurl_easy_send(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was +sent was for internal SSL processing, and no other data could be sent. + .SH AVAILABILITY Added in 7.18.2. .SH RETURN VALUE @@ -59,8 +63,11 @@ wanted to send. On failure, returns the appropriate error code. +This function may return \fBCURLE_AGAIN\fP. In this case, use your operating +system facilities to wait until the socket is writable, and retry. + If there's no socket available to use from the previous transfer, this function -returns CURLE_UNSUPPORTED_PROTOCOL. +returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP. .SH EXAMPLE See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example. .SH "SEE ALSO" diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 index 61289e8d2..973c2aedc 100644 --- a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 +++ b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 @@ -49,3 +49,4 @@ Added in 7.15.2 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. .SH "SEE ALSO" .BR CURLOPT_VERBOSE "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), " +.BR curl_easy_recv "(3), " curl_easy_send "(3) " |