aboutsummaryrefslogtreecommitdiff
path: root/docs/libcurl/curl_multi_socket.3
diff options
context:
space:
mode:
Diffstat (limited to 'docs/libcurl/curl_multi_socket.3')
-rw-r--r--docs/libcurl/curl_multi_socket.382
1 files changed, 82 insertions, 0 deletions
diff --git a/docs/libcurl/curl_multi_socket.3 b/docs/libcurl/curl_multi_socket.3
new file mode 100644
index 000000000..8c42a8db1
--- /dev/null
+++ b/docs/libcurl/curl_multi_socket.3
@@ -0,0 +1,82 @@
+.\" $Id$
+.\"
+.TH curl_multi_socket 3 "21 Dec 2005" "libcurl 7.16.0" "libcurl Manual"
+.SH NAME
+curl_multi_socket - reads/writes available data
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLMcode curl_multi_socket(CURLM * multi_handle,
+ curl_socket_t sockfd,
+ CURL *easy,
+ curl_socket_callback callback,
+ void *userp);
+
+CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+ curl_socket_callback callback,
+ void *userp);
+.SH DESCRIPTION
+Alternative versions of \fIcurl_multi_perform()\fP that allows the application
+to pass in one of the file descriptors/sockets that have been detected to have
+\&"action" on them and let libcurl perform. This allows libcurl to not have to
+scan through all possible file descriptors to check for action. The
+application is recommended to pass in the \fBeasy\fP argument (or set it to
+CURL_EASY_NONE) to make libcurl figure out the internal structure even faster
+and easier. If the easy argument is set to something else than
+CURL_EASY_NONE, the \fBsockfd\fP argument will be ignored by libcurl.
+
+These functions inform the application about updates in the socket (file
+descriptor) status by doing none, one or multiple calls to the
+curl_socket_callback given in the \fBcallback\fP argument. They update the
+status with changes since the previous time this function was used. If
+\fBcallback\fP is NULL, no callback will be called. A status change may also
+be a new timeout only, having the same IN/OUT status as before.
+
+If a previous wait for socket action(s) timed out, you should call this
+function with the socket argument set to CURL_SOCKET_TIMEOUT. If you want to
+force libcurl to (re-)check all its internal sockets, and call the callback
+with status for all sockets no matter what the previous state is, you call
+curl_multi_socket_all() instead.
+
+curl_multi_perform() is the equivalent of calling
+curl_multi_socket_all(handle, NULL, NULL);
+
+Regarding the timeout argument in the callback: it is the timeout (in
+milliseconds) for waiting on action on this socket (and the given time period
+starts when the callback is called) until you should call curl_multi_socket()
+with the timeout stuff mentioned above. If "actions" happens on the socket
+before the timeout happens, remember that the timout timer keeps ticking until
+told otherwise.
+
+The "what" argument has one of five values:
+.RS
+.IP "CURL_POLL_NONE (0)"
+register, not interested in readiness (yet)
+.IP "CURL_POLL_IN (1)"
+register, interested in read readiness
+.IP "CURL_POLL_OUT (2)"
+register, interested in write readiness
+.IP "CURL_POLL_INOUT (3)"
+register, interested in both read and write readiness
+.IP "CURL_POLL_REMOVE (4)"
+deregister
+.RE
+.SH "RETURN VALUE"
+CURLMcode type, general libcurl multi interface error code.
+
+If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you
+should call \fIcurl_multi_perform\fP again, before you select() on more
+actions. You don't have to do it immediately, but the return code means that
+libcurl may have more data available to return or that there may be more data
+to send off before it is "satisfied".
+
+NOTE that this only returns errors etc regarding the whole multi stack. There
+might still have occurred problems on individual transfers even when this
+function returns OK.
+.SH "TYPICAL USAGE"
+Call curl_multi_socket_all() first. Setup a "collection" of sockets to
+supervise, then when action happens call curl_multi_socket() for the easy
+handle that got the action.
+.SH "SEE ALSO"
+.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
+.BR curl_multi_fdset "(3), " curl_multi_info_read "(3)"