MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


libcurl Manual                               curlmultisocket(3)



NAME
     curlmultisocket - reads/writes available data

SYNOPSIS
     #include 

     CURLMcode curlmultisocketaction(CURLM * multihandle,
                                        curlsockett sockfd, int evbitmask,
                                        int *runninghandles);

     Now deprecated versions:
     CURLMcode curlmultisocket(CURLM * multihandle, curlsockett sockfd,
                                 int *runninghandles);

     CURLMcode curlmultisocketall(CURLM *multihandle,
                                     int *runninghandles);

DESCRIPTION
     Alternative versions of  curlmultiperform(3)  that  allows
     the  application  to pass in the file descriptor/socket that
     has been detected to have "action" on  it  and  let  libcurl
     perform.  This lets libcurl avoid having to scan through all
     possible file descriptors to check for action.

     When the application has detected action on a socket handled
     by  libcurl, it should call curlmultisocketaction(3) with
     the sockfd argument set to the socket with the action.  When
     the  events  on a socket are known, they can be passed as an
     events bitmask evbitmask by first setting evbitmask to  0,
     and  then  adding  using  bitwise  OR () any combination of
     events to be chosen from  CURLCSELECTIN,  CURLCSELECTOUT
     or  CURLCSELECTER.  When  the  events  on  a  socket  are
     unknown, pass 0 instead, and libcurl will test the  descrip-
     tor internally.

     At return, the integer runninghandles points to  will  con-
     tain  the  number  of  still running easy handles within the
     multi handle. When this number reaches zero,  all  transfers
     are    complete/done.    Note    that    when    you    call
     curlmultisocketaction(3) on a  specific  socket  and  the
     counter  decreases by one, it DOES NOT necessarily mean that
     this exact socket/transfer is the one  that  completed.  Use
     curlmultiinforead(3) to figure out which easy handle that
     completed.

     The curlmultisocketaction(3) functions inform the  appli-
     cation  about updates in the socket (file descriptor) status
     by doing none, one, or multiple calls to the socket callback
     function  set  with  the  CURLMOPTSOCKETFUNCTION  option to
     curlmultisetopt(3). They update the  status  with  changes
     since the previous time the callback was called.




libcurl 7.16.0       Last change: 9 Jul 2006                    1






libcurl Manual                               curlmultisocket(3)



     Get the timeout time by setting  the  CURLMOPTIMERFUNCTION
     option with curlmultisetopt(3). Your application will then
     get called with information on how long to wait  for  socket
     actions  at  most  before doing the timeout action: call the
     curlmultisocketaction(3) function with the  sockfd  argu-
     ment  set  to  CURLSOCKETIMEOUT.  You  can  also  use the
     curlmultitimeout(3) function to  poll  the  value  at  any
     given time, but for an event-based system using the callback
     is far better than relying on polling the timeout value.

     Usage of curlmultisocket(3)  is  deprecated,  whereas  the
     function  is  equivalent to curlmultisocketaction(3) with
     evbitmask set to 0.

     Force libcurl to (re-)check all  its  internal  sockets  and
     transfers   instead   of   just  a  single  one  by  calling
     curlmultisocketall(3). Note that there should not be  any
     reason to use this function!

CALBACK DETAILS
     The socket callback function uses a prototype like this

       int curlsocketcallback(CURL *easy,      /* easy handle */
                                curlsockett s, /* socket */
                                int action,      /* see values below */
                                void *userp,    /* private callback pointer */
                                void *socketp); /* private socket pointer */

     The callback MUST return 0.

     The easy argument is a pointer to the easy handle that deals
     with  this  particular socket. Note that a single handle may
     work with several sockets simultaneously.

     The s argument is the actual socket  value  as  you  use  it
     within your system.

     The action argument to the callback has one of five values:

          CURLPOLNONE (0)
               register, not interested in readiness (yet)

          CURLPOLIN (1)
               register, interested in read readiness

          CURLPOLOUT (2)
               register, interested in write readiness

          CURLPOLINOUT (3)
               register, interested in both read and write readi-
               ness




libcurl 7.16.0       Last change: 9 Jul 2006                    2






libcurl Manual                               curlmultisocket(3)



          CURLPOLREMOVE (4)
               unregister

     The socketp argument is a private pointer  you  have  previ-
     ously  set  with  curlmultiassign(3) to be associated with
     the s socket. If no pointer has been set,  socketp  will  be
     NUL.  This  argument is of course a service to applications
     that want to keep certain data or structs that are  strictly
     associated to the given socket.

     The userp argument is a private pointer you have  previously
     set  with  curlmultisetopt(3)  and the CURLMOPTSOCKETDATA
     option.

RETURN VALUE
     CURLMcode type, general libcurl multi interface error code.

     Legacy: If you receive CURLMCALMULTIPERFORM, this  basi-
     cally means that you should call curlmultisocket(3) again,
     before you wait for more actions on libcurl's  sockets.  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".

     In    modern    libcurls,    CURLMCALMULTIPERFORM     or
     CURLMCALMULTISOKCET should not be returned and no appli-
     cation needs to care about them.

     NOTE that the return code is  for  the  whole  multi  stack.
     Problems  still  might have occurred on individual transfers
     even when one of these functions return OK.

TYPICAL USAGE
     1. Create a multi handle

     2. Set the socket callback with CURLMOPTSOCKETFUNCTION

     3. Set the timeout callback with CURLMOPTIMERFUNCTION,  to
     get  to  know  what  timeout  value  to use when waiting for
     socket activities.

     4. Add easy handles with curlmultiaddhandle()

     5. Provide some means  to  manage  the  sockets  libcurl  is
     using,  so you can check them for activity. This can be done
     through your application code, or  by  way  of  an  external
     library such as libevent or glib.

     6. Wait for activity on any of libcurl's  sockets,  use  the
     timeout value your callback has been told

     7,      When      activity      is      detected,       call



libcurl 7.16.0       Last change: 9 Jul 2006                    3






libcurl Manual                               curlmultisocket(3)



     curlmultisocketaction()   for   the  socket(s)  that  got
     action. If no activity is detected and the timeout  expires,
     call curlmultisocketaction(3) with CURLSOCKETIMEOUT

     8. Go back to step 6.

AVAILABILITY
     This function was added in libcurl  7.15.4,  and  is  deemed
     stable since 7.16.0.

     curlmultisocket(3)        is        deprecated,        use
     curlmultisocketaction(3) instead!

SEE ALSO
     curlmulticleanup(3),                   curlmultiinit(3),
     curlmultifdset(3),       curlmultiinforead(3),      the
     hiperfifo.c example

ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:

     
       ATRIBUTE TYPE     ATRIBUTE VALUE
    
     Availability         SUNWcurl       
    
     Interface Stability  Uncommitted    
    

NOTES
     Source for C-URL is available on http:/opensolaris.org.























libcurl 7.16.0       Last change: 9 Jul 2006                    4



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™