1 |
dpavlin |
32 |
#!/usr/bin/perl |
2 |
|
|
|
3 |
|
|
use strict; |
4 |
|
|
use warnings; |
5 |
|
|
|
6 |
|
|
use IO::Select; |
7 |
|
|
use IO::Socket; |
8 |
|
|
use lib 'lib'; |
9 |
|
|
use LDAP::Koha; |
10 |
|
|
|
11 |
dpavlin |
37 |
my $listen = shift @ARGV || 'localhost:2389'; |
12 |
dpavlin |
32 |
|
13 |
|
|
my $sock = IO::Socket::INET->new( |
14 |
|
|
Listen => 5, |
15 |
|
|
Proto => 'tcp', |
16 |
|
|
Reuse => 1, |
17 |
dpavlin |
34 |
LocalAddr => $listen, |
18 |
dpavlin |
37 |
) || die "can't listen to $listen $!"; |
19 |
dpavlin |
32 |
|
20 |
dpavlin |
34 |
warn "# listening on $listen"; |
21 |
dpavlin |
32 |
|
22 |
|
|
my $sel = IO::Select->new($sock); |
23 |
|
|
my %Handlers; |
24 |
|
|
while (my @ready = $sel->can_read) { |
25 |
|
|
foreach my $fh (@ready) { |
26 |
|
|
if ($fh == $sock) { |
27 |
|
|
# let's create a new socket |
28 |
|
|
my $psock = $sock->accept; |
29 |
dpavlin |
102 |
$psock->sockopt(SO_KEEPALIVE,1); |
30 |
dpavlin |
32 |
$sel->add($psock); |
31 |
|
|
$Handlers{*$psock} = LDAP::Koha->new($psock); |
32 |
|
|
} else { |
33 |
|
|
my $result = $Handlers{*$fh}->handle; |
34 |
|
|
if ($result) { |
35 |
|
|
# we have finished with the socket |
36 |
|
|
$sel->remove($fh); |
37 |
|
|
$fh->close; |
38 |
|
|
delete $Handlers{*$fh}; |
39 |
|
|
} |
40 |
|
|
} |
41 |
|
|
} |
42 |
|
|
} |
43 |
|
|
|
44 |
|
|
1; |