AnyEvent
view release on metacpan or search on metacpan
lib/AnyEvent/Util.pm view on Meta::CPAN
die "fork_call: $!";
}
}
}
sub fork_call(&@) {
push @fork_queue, [@_];
_fork_schedule;
}
END {
if (AnyEvent::WIN32) {
while ($forks) {
@fork_queue = ();
AnyEvent->one_event;
}
}
}
# to be removed
sub dotted_quad($) {
$_[0] =~ /^(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]?)
\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]?)
\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]?)
\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9][0-9]?)$/x
}
# just a forwarder
sub inet_aton {
require AnyEvent::Socket;
*inet_aton = \&AnyEvent::Socket::inet_aton;
goto &inet_aton
}
=item fh_nonblocking $fh, $nonblocking
Sets the blocking state of the given filehandle (true == nonblocking,
false == blocking). Uses fcntl on anything sensible and ioctl FIONBIO on
broken (i.e. windows) platforms.
Instead of using this function, you could use C<AnyEvent::fh_block> or
C<AnyEvent::fh_unblock>.
=cut
BEGIN {
*fh_nonblocking = \&AnyEvent::_fh_nonblocking;
}
=item $guard = guard { CODE }
This function creates a special object that, when destroyed, will execute
the code block.
This is often handy in continuation-passing style code to clean up some
resource regardless of where you break out of a process.
The L<Guard> module will be used to implement this function, if it is
available. Otherwise a pure-perl implementation is used.
While the code is allowed to throw exceptions in unusual conditions, it is
not defined whether this exception will be reported (at the moment, the
Guard module and AnyEvent's pure-perl implementation both try to report
the error and continue).
You can call one method on the returned object:
=item $guard->cancel
This simply causes the code block not to be invoked: it "cancels" the
guard.
=cut
BEGIN {
if (!$ENV{PERL_ANYEVENT_AVOID_GUARD} && eval { require Guard; $Guard::VERSION >= 0.5 }) {
*guard = \&Guard::guard;
AE::log 8 => "Using Guard module to implement guards.";
} else {
*AnyEvent::Util::guard::DESTROY = sub {
local $@;
eval {
local $SIG{__DIE__};
${$_[0]}->();
};
AE::log 4 => "Runtime error in AnyEvent::guard callback: $@" if $@;
};
*AnyEvent::Util::guard::cancel = sub ($) {
${$_[0]} = sub { };
};
*guard = sub (&) {
bless \(my $cb = shift), "AnyEvent::Util::guard"
};
AE::log 8 => "Using pure-perl guard implementation.";
}
}
=item AnyEvent::Util::close_all_fds_except @fds
This rarely-used function simply closes all file descriptors (or tries to)
of the current process except the ones given as arguments.
When you want to start a long-running background server, then it is often
beneficial to do this, as too many C-libraries are too stupid to mark
their internal fd's as close-on-exec.
The function expects to be called shortly before an C<exec> call.
Example: close all fds except 0, 1, 2.
close_all_fds_except 0, 2, 1;
=cut
sub close_all_fds_except {
my %except; @except{@_} = ();
( run in 0.550 second using v1.01-cache-2.11-cpan-39bf76dae61 )