diff --git a/pandora_agents/pc/Win32/util/tentacle_server.exe b/pandora_agents/pc/Win32/util/tentacle_server.exe index 79535b4598..53eea500c1 100644 Binary files a/pandora_agents/pc/Win32/util/tentacle_server.exe and b/pandora_agents/pc/Win32/util/tentacle_server.exe differ diff --git a/pandora_agents/unix/tentacle_server b/pandora_agents/unix/tentacle_server index b7cd6c0961..f77fefd5f3 100755 --- a/pandora_agents/unix/tentacle_server +++ b/pandora_agents/unix/tentacle_server @@ -64,6 +64,7 @@ use threads; use Thread::Semaphore; use POSIX ":sys_wait_h"; use Time::HiRes qw(usleep); +use Scalar::Util qw(refaddr); # Constants for Win32 services. use constant WIN32_SERVICE_STOPPED => 0x01; @@ -684,7 +685,7 @@ sub accept_connections { my $pid; my $t_server_socket; - # Ignore SIGPIPE errors (happens on FreeBSD when SSL is enabled ¿?) + # Ignore SIGPIPE $SIG{PIPE} = 'IGNORE'; # Start server @@ -774,14 +775,21 @@ sub serve_proxy_connection { # Forward data between the client and the server. eval { - while (1) { - if ($t_select->can_read(0)) { + my $select = IO::Select->new (); + $select->add($t_proxy_socket); + $select->add($t_client_socket); + while (my @ready = $select->can_read()) { + foreach my $socket (@ready) { + if (refaddr($socket) == refaddr($t_client_socket)) { my ($read, $data) = recv_data($t_block_size); + return unless defined($data); send_data_proxy($data); - } - if ($t_proxy_select->can_read(0)) { + } + else { my ($read, $data) = recv_data_proxy($t_block_size); + return unless defined($data); send_data($data); + } } } }; @@ -974,8 +982,10 @@ sub print_log { sub error { if ($t_quiet == 0) { - die("[err] $_[0]\n\n"); + print (STDERR "[err] $_[0]\n"); } + + die("\n"); } ################################################################################ diff --git a/pandora_agents/win32/bin/util/tentacle_server.exe b/pandora_agents/win32/bin/util/tentacle_server.exe index 79535b4598..53eea500c1 100644 Binary files a/pandora_agents/win32/bin/util/tentacle_server.exe and b/pandora_agents/win32/bin/util/tentacle_server.exe differ diff --git a/pandora_server/bin/tentacle_server b/pandora_server/bin/tentacle_server index 5081776a43..f77fefd5f3 100755 --- a/pandora_server/bin/tentacle_server +++ b/pandora_server/bin/tentacle_server @@ -64,6 +64,7 @@ use threads; use Thread::Semaphore; use POSIX ":sys_wait_h"; use Time::HiRes qw(usleep); +use Scalar::Util qw(refaddr); # Constants for Win32 services. use constant WIN32_SERVICE_STOPPED => 0x01; @@ -774,14 +775,21 @@ sub serve_proxy_connection { # Forward data between the client and the server. eval { - while (1) { - if ($t_select->can_read(0)) { + my $select = IO::Select->new (); + $select->add($t_proxy_socket); + $select->add($t_client_socket); + while (my @ready = $select->can_read()) { + foreach my $socket (@ready) { + if (refaddr($socket) == refaddr($t_client_socket)) { my ($read, $data) = recv_data($t_block_size); + return unless defined($data); send_data_proxy($data); - } - if ($t_proxy_select->can_read(0)) { + } + else { my ($read, $data) = recv_data_proxy($t_block_size); + return unless defined($data); send_data($data); + } } } }; diff --git a/pandora_server/bin/tentacle_server.exe b/pandora_server/bin/tentacle_server.exe index b92652bd7b..53eea500c1 100644 Binary files a/pandora_server/bin/tentacle_server.exe and b/pandora_server/bin/tentacle_server.exe differ