1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

multi docs: extended the multi_socket API description

This commit is contained in:
Daniel Stenberg 2011-09-28 13:53:59 +02:00
parent bd158607ca
commit 9f2f8d5122

View File

@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___ .\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____| .\" * \___|\___/|_| \_\_____|
.\" * .\" *
.\" * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al. .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * .\" *
.\" * This software is licensed as described in the file COPYING, which .\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms .\" * you should have received as part of this distribution. The terms
@ -118,13 +118,32 @@ If you want to re-use an easy handle that was added to the multi handle for
transfer, you must first remove it from the multi stack and then re-add it transfer, you must first remove it from the multi stack and then re-add it
again (possibly after having altered some options at your own choice). again (possibly after having altered some options at your own choice).
.SH "MULTI_SOCKET" .SH "MULTI_SOCKET"
Since 7.16.0, the \fIcurl_multi_socket_action(3)\fP function offers a way for \fIcurl_multi_socket_action(3)\fP function offers a way for applications to
applications to not only avoid being forced to use select(), but it also not only avoid being forced to use select(), but it also offers a much more
offers a much more high-performance API that will make a significant high-performance API that will make a significant difference for applications
difference for applications using large numbers of simultaneous connections. using large numbers of simultaneous connections.
\fIcurl_multi_socket_action(3)\fP is then used \fIcurl_multi_socket_action(3)\fP is then used instead of
instead of \fIcurl_multi_perform(3)\fP. \fIcurl_multi_perform(3)\fP.
When using this API, you add easy handles to the multi handle just as with the
normal multi interface. Then you also set two callbacks with the
CURLMOPT_SOCKETFUNCTION and CURLMOPT_TIMERFUNCTION options to
\fIcurl_multi_setopt(3)\fP.
The API is then designed to inform your application about which sockets
libcurl is currently using and for what activities (read and/or write) on
those sockets your application is expected to wait for.
Your application must then make sure to receive all sockets informed about in
the CURLMOPT_SOCKETFUNCTION callback and make sure it reacts on the given
activity on them. When a socket has the given activity, you call
\fIcurl_multi_socket_action(3)\fP specifying which socket and action there
are.
The CURLMOPT_TIMERFUNCTION callback is called to set a timeout. When that
timeout expires, your application should call the
\fIcurl_multi_socket_action(3)\fP function saying it was due to a timeout.
.SH "BLOCKING" .SH "BLOCKING"
A few areas in the code are still using blocking code, even when used from the A few areas in the code are still using blocking code, even when used from the
multi interface. While we certainly want and intend for these to get fixed in multi interface. While we certainly want and intend for these to get fixed in