3 |
use strict; |
use strict; |
4 |
use warnings; |
use warnings; |
5 |
|
|
6 |
use IO::Select; |
#use Jifty; |
7 |
use IO::Socket; |
#BEGIN { Jifty->new; }; |
8 |
|
#Jifty->web->request(Jifty::Request->new); |
9 |
|
#Jifty->web->response(Jifty::Response->new); |
10 |
|
|
11 |
use lib 'lib'; |
use lib 'lib'; |
12 |
use A3C::LDAP::Server; |
use A3C::LDAP::Server; |
13 |
|
|
14 |
my $port = 1389; |
A3C::LDAP::Server->run({ port => 1389 }); |
|
|
|
|
my $sock = IO::Socket::INET->new( |
|
|
Listen => 5, |
|
|
Proto => 'tcp', |
|
|
Reuse => 1, |
|
|
LocalPort => $port, |
|
|
); |
|
|
|
|
|
warn "listen on port $port\n"; |
|
|
|
|
|
my $sel = IO::Select->new($sock); |
|
|
my %Handlers; |
|
|
while (my @ready = $sel->can_read) { |
|
|
foreach my $fh (@ready) { |
|
|
if ($fh == $sock) { |
|
|
# let's create a new socket |
|
|
my $psock = $sock->accept; |
|
|
$sel->add($psock); |
|
|
$Handlers{*$psock} = A3C::LDAP::Server->new($psock); |
|
|
} else { |
|
|
my $result = $Handlers{*$fh}->handle; |
|
|
if ($result) { |
|
|
# we have finished with the socket |
|
|
$sel->remove($fh); |
|
|
$fh->close; |
|
|
delete $Handlers{*$fh}; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
15 |
|
|
16 |
1; |
1; |