/usr/share/perl5/Gearman/Server/Listener.pm is in gearman-server 1.11-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | package Gearman::Server::Listener;
use strict;
use base 'Danga::Socket';
use fields qw(server accept_per_loop);
use Errno qw(EAGAIN);
use Socket qw(IPPROTO_TCP TCP_NODELAY SOL_SOCKET SO_ERROR);
sub new {
my Gearman::Server::Listener $self = shift;
my $sock = shift;
my $server = shift;
my %opts = @_;
my $accept_per_loop = delete $opts{accept_per_loop};
warn "Extra options passed into new: " . join(', ', keys %opts) . "\n"
if keys %opts;
$accept_per_loop = 10 unless defined $accept_per_loop and $accept_per_loop >= 1;
$self = fields::new($self) unless ref $self;
# make sure provided listening socket is non-blocking
IO::Handle::blocking($sock, 0);
$self->SUPER::new($sock);
$self->{server} = $server;
$self->{accept_per_loop} = int($accept_per_loop);
$self->watch_read(1);
return $self;
}
sub event_read {
my Gearman::Server::Listener $self = shift;
my $listen_sock = $self->sock;
local $!;
local $SIG{PIPE} = "IGNORE";
my $remaining = $self->{accept_per_loop};
while (my $csock = $listen_sock->accept) {
IO::Handle::blocking($csock, 0);
setsockopt($csock, IPPROTO_TCP, TCP_NODELAY, pack("l", 1)) or die;
my $server = $self->{server};
$server->debug(sprintf("Listen child making a Client for %d.", fileno($csock)));
$server->new_client($csock);
return unless $remaining-- > 0;
}
return if $! == EAGAIN;
warn "Error accepting incoming connection: $!\n";
$self->watch_read(0);
Danga::Socket->AddTimer( .1, sub {
$self->watch_read(1);
});
}
1;
|