30c2c9e003fb21f2f937480e88f9e2b5c67b755f
[virtual-ldap] / bin / ldap-koha.pl
1 #!/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 my $debug = $ENV{DEBUG} || 0;
12
13 BEGIN {
14         $SIG{'__WARN__'} = sub {
15                 my $level = $1 if $_[0] =~ m/^(#+)/;
16                 return if defined($level) && length($level) > $debug;
17
18                 warn join("\n", @_);
19         };
20 }
21 my $listen = shift @ARGV || 'localhost:2389';
22
23 my $sock = IO::Socket::INET->new(
24         Listen => 5,
25         Proto => 'tcp',
26         Reuse => 1,
27         LocalAddr => $listen,
28 ) || die "can't listen to $listen $!";
29
30 warn "# listening on $listen";
31
32 my $sel = IO::Select->new($sock);
33 my %Handlers;
34 while (my @ready = $sel->can_read) {
35         foreach my $fh (@ready) {
36                 if ($fh == $sock) {
37                         # let's create a new socket
38                         my $psock = $sock->accept;
39                         $psock->sockopt(SO_KEEPALIVE,1);
40                         $sel->add($psock);
41                         $Handlers{*$psock} = LDAP::Koha->new($psock);
42                 } else {
43                         my $result = $Handlers{*$fh}->handle;
44                         if ($result) {
45                                 # we have finished with the socket
46                                 $sel->remove($fh);
47                                 $fh->close;
48                                 delete $Handlers{*$fh};
49                         }
50                 }
51         }
52 }
53
54 1;