[openssl-commits] [openssl] OpenSSL_1_1_0-stable update
Richard Levitte
levitte at openssl.org
Fri Jan 19 09:15:18 UTC 2018
The branch OpenSSL_1_1_0-stable has been updated
via 09f1a0937deb8c10a30c1f405aff3163d346bbdf (commit)
from 2087582d0455111d6627a142668fdf0ebff1d89f (commit)
- Log -----------------------------------------------------------------
commit 09f1a0937deb8c10a30c1f405aff3163d346bbdf
Author: Richard Levitte <levitte at openssl.org>
Date: Wed Jan 17 11:22:47 2018 +0100
Create one permanent proxy socket per TLSProxy::Proxy instance
On Windows, we sometimes see a behavior with SO_REUSEADDR where there
remains lingering listening sockets on the same address and port as a
newly created one.
To avoid this scenario, we don't create a new proxy port for each new
client run. Instead, we create one proxy socket when the proxy object
is created, and close it when destroying that object.
Reviewed-by: Bernd Edlinger <bernd.edlinger at hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/5095)
(cherry picked from commit c7454e1af74b1b99f3f47f782a6ac484c4c55b7f)
-----------------------------------------------------------------------
Summary of changes:
util/perl/TLSProxy/Proxy.pm | 65 +++++++++++++++++++++++----------------------
1 file changed, 33 insertions(+), 32 deletions(-)
diff --git a/util/perl/TLSProxy/Proxy.pm b/util/perl/TLSProxy/Proxy.pm
index 6ed13e3..88b048e 100644
--- a/util/perl/TLSProxy/Proxy.pm
+++ b/util/perl/TLSProxy/Proxy.pm
@@ -94,9 +94,35 @@ sub new
}
}
+ # Create the Proxy socket
+ my $proxaddr = $self->{proxy_addr};
+ $proxaddr =~ s/[\[\]]//g; # Remove [ and ]
+ my @proxyargs = (
+ LocalHost => $proxaddr,
+ LocalPort => $self->{proxy_port},
+ Proto => "tcp",
+ Listen => SOMAXCONN,
+ );
+ push @proxyargs, ReuseAddr => 1
+ unless $^O eq "MSWin32";
+ $self->{proxy_sock} = $IP_factory->(@proxyargs);
+
+ if ($self->{proxy_sock}) {
+ print "Proxy started on port ".$self->{proxy_port}."\n";
+ } else {
+ warn "Failed creating proxy socket (".$proxaddr.",".$self->{proxy_port}."): $!\n";
+ }
+
return bless $self, $class;
}
+sub DESTROY
+{
+ my $self = shift;
+
+ $self->{proxy_sock}->close() if $self->{proxy_sock};
+}
+
sub clearClient
{
my $self = shift;
@@ -145,6 +171,10 @@ sub start
my ($self) = shift;
my $pid;
+ if ($self->{proxy_sock} == 0) {
+ return 0;
+ }
+
$pid = fork();
if ($pid == 0) {
my $execcmd = $self->execute
@@ -175,26 +205,6 @@ sub clientstart
my ($self) = shift;
my $oldstdout;
- # Create the Proxy socket
- my $proxaddr = $self->proxy_addr;
- $proxaddr =~ s/[\[\]]//g; # Remove [ and ]
- my @proxyargs = (
- LocalHost => $proxaddr,
- LocalPort => $self->proxy_port,
- Proto => "tcp",
- Listen => SOMAXCONN,
- );
- push @proxyargs, ReuseAddr => 1
- unless $^O eq "MSWin32";
- my $proxy_sock = $IP_factory->(@proxyargs);
-
- if ($proxy_sock) {
- print "Proxy started on port ".$self->proxy_port."\n";
- } else {
- warn "Failed creating proxy socket (".$proxaddr.",".$self->proxy_port."): $!\n";
- return 0;
- }
-
if ($self->execute) {
my $pid = fork();
if ($pid == 0) {
@@ -226,7 +236,7 @@ sub clientstart
# Wait for incoming connection from client
my $client_sock;
- if(!($client_sock = $proxy_sock->accept())) {
+ if(!($client_sock = $self->{proxy_sock}->accept())) {
warn "Failed accepting incoming connection: $!\n";
return 0;
}
@@ -299,9 +309,6 @@ sub clientstart
#Closing this also kills the child process
$client_sock->close();
}
- if($proxy_sock) {
- $proxy_sock->close();
- }
if(!$self->debug) {
select($oldstdout);
}
@@ -411,24 +418,18 @@ sub supports_IPv6
my $self = shift;
return $have_IPv6;
}
-
-#Read/write accessors
sub proxy_addr
{
my $self = shift;
- if (@_) {
- $self->{proxy_addr} = shift;
- }
return $self->{proxy_addr};
}
sub proxy_port
{
my $self = shift;
- if (@_) {
- $self->{proxy_port} = shift;
- }
return $self->{proxy_port};
}
+
+#Read/write accessors
sub server_addr
{
my $self = shift;
More information about the openssl-commits
mailing list