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