diff --git a/pupy/proxy/daemon.go b/pupy/proxy/daemon.go index 5bc884e9..3ee46757 100644 --- a/pupy/proxy/daemon.go +++ b/pupy/proxy/daemon.go @@ -34,6 +34,10 @@ func (d *Daemon) ListenAndServe() error { return err } + conn.(*net.TCPConn).SetKeepAlive(true) + conn.(*net.TCPConn).SetKeepAlivePeriod(1 * time.Minute) + conn.(*net.TCPConn).SetNoDelay(true) + conn = tls.Server(conn, ListenerConfig) go d.handle(conn) @@ -67,10 +71,6 @@ func (d *Daemon) onListenerDisabled() { func (d *Daemon) handle(conn net.Conn) { defer conn.Close() - conn.(*net.TCPConn).SetKeepAlive(true) - conn.(*net.TCPConn).SetKeepAlivePeriod(1 * time.Minute) - conn.(*net.TCPConn).SetNoDelay(true) - brh := &BindRequestHeader{} err := RecvMessage(conn, brh) diff --git a/pupy/proxy/main.go b/pupy/proxy/main.go index ec324087..e600fbe8 100644 --- a/pupy/proxy/main.go +++ b/pupy/proxy/main.go @@ -77,7 +77,15 @@ func init() { } if strings.Index(ProxyBindHost, ":") == -1 { + if ExternalBindHost == "0.0.0.0" { + ExternalBindHost = ProxyBindHost + } + ProxyBindHost = fmt.Sprintf("%s:%d", ProxyBindHost, ProxyBindPort) + } else { + if ExternalBindHost == "0.0.0.0" { + ExternalBindHost = strings.SplitN(ProxyBindHost, ":", 1)[0] + } } if strings.Index(ExternalBindHost, ":") != -1 { diff --git a/pupy/pupylib/PupyServer.py b/pupy/pupylib/PupyServer.py index a7752e87..b17f5710 100644 --- a/pupy/pupylib/PupyServer.py +++ b/pupy/pupylib/PupyServer.py @@ -219,6 +219,7 @@ class Listener(Thread): external = self.external external_port = self.external_port authenticator = self.authenticator + port = self.port if self.pproxy: if type(authenticator) == PupySSLAuthenticator: @@ -245,10 +246,11 @@ class Listener(Thread): authenticator = None ipv6 = False igd = None + port = 0 self.server = server( PupyService, - port=self.port, hostname=self.address, + port=port, hostname=self.address, authenticator=authenticator, stream=stream, transport=transport, @@ -265,7 +267,7 @@ class Listener(Thread): ## Workaround.. self.server.listener.close() - self.server.listener = method(self.port, extra=extra) + self.server.listener = method(self.external_port, extra=extra) def run(self): self.server.start()