-my $targetsock = $config->{upstream_ssl}
- ? IO::Socket::INET->new(
- Proto => 'tcp',
- PeerAddr => $config->{upstream_ldap},
- PeerPort => 389,
- )
- : IO::Socket::SSL->new( $config->{upstream_ldap} . ':ldaps')
- || die "can't open upstream socket: $!";
-
-run_proxy($listenersock,$targetsock);
+my $sel = IO::Select->new($listenersock);
+while (my @ready = $sel->can_read) {
+ foreach my $fh (@ready) {
+ if ($fh == $listenersock) {
+ # let's create a new socket
+ my $psock = $listenersock->accept;
+ $sel->add($psock);
+ warn "## add $psock " . time;
+ } else {
+ $server_sock->{$fh} ||= connect_to_server;
+ if ( ! handle($fh,$server_sock->{$fh}) ) {
+ warn "## remove $fh " . time;
+ $sel->remove($server_sock->{$fh});
+ $server_sock->{$fh}->close;
+ delete $server_sock->{$fh};
+ # we have finished with the socket
+ $sel->remove($fh);
+ $fh->close;
+ }
+ }
+ }
+}