cURL / Mailing Lists / curl-library / Single Mail

curl-library

Trying to understand distinction and use of curl_multi_socket and multi_perform etc

From: vick <vijayx_at_gmail.com>
Date: Tue, 19 Jan 2010 19:40:51 +0530

There's both multi_socket and multi_perform interfaces.
I am not clear as to which is better or not and which one to use in
which circumstances. There's no discussion, but there's a simplistic
example of curl_multi_perform.

In any case some digression/explanation of multi_socket and its
scenarios would be useful. Also, some code illustrating the below
calls would be great.

From the header:-

/*
 * Name: curl_multi_socket() and
 * curl_multi_socket_all()
 *
 * Desc: An alternative version of curl_multi_perform() that allows the
 * application to pass in one of the file descriptors that have been
 * detected to have "action" on them and let libcurl perform.
 * See man page for details.
 */
#define CURL_POLL_NONE 0
#define CURL_POLL_IN 1
#define CURL_POLL_OUT 2
#define CURL_POLL_INOUT 3
#define CURL_POLL_REMOVE 4

#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD

#define CURL_CSELECT_IN 0x01
#define CURL_CSELECT_OUT 0x02
#define CURL_CSELECT_ERR 0x04

typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
                                    curl_socket_t s, /* socket */
                                    int what, /* see above */
                                    void *userp, /* private callback
                                                        pointer */
                                    void *socketp); /* private socket
                                                        pointer */
/*
 * Name: curl_multi_timer_callback
 *
 * Desc: Called by libcurl whenever the library detects a change in the
 * maximum number of milliseconds the app is allowed to wait before
 * curl_multi_socket() or curl_multi_perform() must be called
 * (to allow libcurl's timed events to take place).
 *
 * Returns: The callback should return zero.
 */
typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
                                         long timeout_ms, /* see above */
                                         void *userp); /* private callback
                                                             pointer */

CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
                                        int *running_handles);

CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
                                               curl_socket_t s,
                                               int ev_bitmask,
                                               int *running_handles);

CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
                                            int *running_handles);
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2010-01-19