I am having trouble figuring out the approved way to resume a paused
multi socket send session.

I am using a poll based single threaded implementation with
multi_socket at the core.

I have a read_callback function which supplies data, and use
socket_callback to add the socket to my poll loop.

When the read_callback can't keep up, I pause the session (returning
READ_FUNC_PAUSE). This shortly results in a callback to remove the OUT
poll from the poll loop.

When data is available, I do a curl_easy_pause(handle,
CURLPAUSE_CONT).  This correctly changes the session keepon state back
to running, but does not cause a new socket_callback to add the
sending fd back into the poll loop.

At this point, I do not know what to do.  A solution that works is to
do a curl_multi_socket_all(), which forces a handle rescan and the
resulting socket_callback, but it is deprecated.  I do not link
handles to sockets (the poll loop works only on sockets, the curl
logic only on handles), and I don't know an easy way of making the
relationship anyway... so I cannot use curl_multi_socket_action
without the socket.

Am I missing something?  if not, adding a conditional to the
curl_multi_socket_action call which detects a -1 socket and calls
multi_socket with the checkall flag (essentially undeprecating
multi_socket_all for this use case) seems a pretty elegant way of
solving the issue... and adding some documentation to the
curl_easy_pause page about the necessity of calling it in a
multi-socket world.  Alternatively, is there an easy way to get the
socket out of the handle (int sock =-1; curl_easy_getinfo(handle,
CURLINFO_LASTSOCKET, &sock) leaves sock at -1) as it allow me to use
socket_action with the specific socket.

thanks
steve
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to