Commit 55fd5d3f authored by Andy Polyakov's avatar Andy Polyakov
Browse files

TLSProxy/Proxy.pm: harmonize inner loop with the way sockets are.

parent 6e301900
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -356,7 +356,8 @@ sub clientstart
    my @ready;
    my $ctr = 0;
    local $SIG{PIPE} = "IGNORE";
    while(     (!(TLSProxy::Message->end)
    while($fdset->count
            && (!(TLSProxy::Message->end)
                || (defined $self->sessionfile()
                    && (-s $self->sessionfile()) == 0))
            && $ctr < 10) {
@@ -366,15 +367,25 @@ sub clientstart
        }
        foreach my $hand (@ready) {
            if ($hand == $server_sock) {
                $server_sock->sysread($indata, 16384) or goto END;
                $indata = $self->process_packet(1, $indata);
                $client_sock->syswrite($indata);
                if ($server_sock->sysread($indata, 16384)) {
                    if ($indata = $self->process_packet(1, $indata)) {
                        $client_sock->syswrite($indata) or goto END;
                    }
                    $ctr = 0;
                } else {
                    $fdset->remove($server_sock);
                    $client_sock->shutdown(SHUT_WR);
                }
            } elsif ($hand == $client_sock) {
                $client_sock->sysread($indata, 16384) or goto END;
                $indata = $self->process_packet(0, $indata);
                $server_sock->syswrite($indata);
                if ($client_sock->sysread($indata, 16384)) {
                    if ($indata = $self->process_packet(0, $indata)) {
                        $server_sock->syswrite($indata) or goto END;
                    }
                    $ctr = 0;
                } else {
                    $fdset->remove($client_sock);
                    $server_sock->shutdown(SHUT_WR);
                }
            } else {
                kill(3, $self->{real_serverpid});
                die "Unexpected handle";