The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::Curl::Promiser::Select

DESCRIPTION

This module implements Net::Curl::Promiser via Perl’s select() built-in.

See /examples in the distribution for a fleshed-out demonstration.

This is “the hard way” to do this, by the way. Your life will be simpler if you use (or create) an event-loop-based implementation like Net::Curl::Promiser::AnyEvent or Net::Curl::Promiser::IOAsync. See /examples for comparisons.

METHODS

The following are added in addition to the base class methods:

($rmask, $wmask, $emask) = OBJ->get_vecs();

Returns the bitmasks to use as input to select().

Note that, since these are copies of OBJ’s internal values, you don’t need to copy them again before calling select().

@fds = OBJ->get_fds();

Returns the file descriptors that OBJ tracks—or, in scalar context, the count of such. Useful to check for exception events.

$obj = OBJ->process( $READ_MASK, $WRITE_MASK )

Tell the underlying Net::Curl::Multi object which socket events have happened. $READ_MASK and $WRITE_MASK are as “left” by Perl’s select() built-in.

If, in fact, no events have happened, then this calls socket_action(CURL_SOCKET_TIMEOUT) on the Net::Curl::Multi object (similar to time_out()).

Finally, this reaps whatever pending HTTP responses may be ready and resolves or rejects the corresponding Promise objects.

Returns OBJ.

$is_active = OBJ->time_out();

Tell the underlying Net::Curl::Multi object that a timeout happened, and reap whatever pending HTTP responses may be ready.

Calls socket_action(CURL_SOCKET_TIMEOUT) on the underlying Net::Curl::Multi object. The return is the same as that operation returns.

Since process() can also do the work of this function, a call to this function is just an optimization.

This should only be called from event loop logic.

$num = OBJ->get_timeout()

Like libcurl’s curl_multi_timeout(3), but sometimes returns different values depending on the needs of OBJ.

(NB: This value is in seconds, not milliseconds.)

This should only be called (if it’s called at all) from event loop logic.