use IO::Handle;
use IO::Socket;
use Cwd qw/abs_path/;
+use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
STDOUT->autoflush(1);
STDERR->autoflush(1);
require Danga::Socket;
}
sub daemonize () {
- foreach my $i (0..$#ARGV) {
- my $arg = $ARGV[$i];
- next unless -e $arg;
- $ARGV[$i] = abs_path($arg);
- }
- check_absolute('stdout', $stdout);
- check_absolute('stderr', $stderr);
- check_absolute('pid-file', $pid_file);
+ if ($daemonize) {
+ foreach my $i (0..$#ARGV) {
+ my $arg = $ARGV[$i];
+ next unless -e $arg;
+ $ARGV[$i] = abs_path($arg);
+ }
+ check_absolute('stdout', $stdout);
+ check_absolute('stderr', $stderr);
+ check_absolute('pid-file', $pid_file);
- chdir '/' or die "chdir failed: $!";
+ chdir '/' or die "chdir failed: $!";
+ }
return unless (defined $pid_file || defined $group || defined $user
|| $daemonize);
Danga::Socket->SetPostLoopCallback(sub {
my ($dmap, undef) = @_;
my $n = 0;
+ my $now = clock_gettime(CLOCK_MONOTONIC);
foreach my $s (values %$dmap) {
$s->can('busy') or next;
- if ($s->busy) {
+ if ($s->busy($now)) {
++$n;
} else {
# close as much as possible, early as possible