From 0bca6e86573a172e13ae1f1f5fdbd6fc18deab8a Mon Sep 17 00:00:00 2001 From: v2ray Date: Mon, 15 Aug 2016 22:20:16 +0200 Subject: [PATCH] fix kcp listener --- transport/internet/kcp/listener.go | 11 +++-------- transport/internet/udp/hub.go | 4 ++++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/transport/internet/kcp/listener.go b/transport/internet/kcp/listener.go index d0aa1163..5bdcb1a1 100644 --- a/transport/internet/kcp/listener.go +++ b/transport/internet/kcp/listener.go @@ -22,7 +22,6 @@ type Listener struct { sessions map[string]*Connection awaitingConns chan *Connection hub *udp.UDPHub - localAddr *net.UDPAddr } func NewListener(address v2net.Address, port v2net.Port) (*Listener, error) { @@ -34,11 +33,7 @@ func NewListener(address v2net.Address, port v2net.Port) (*Listener, error) { authenticator: auth, sessions: make(map[string]*Connection), awaitingConns: make(chan *Connection, 64), - localAddr: &net.UDPAddr{ - IP: address.IP(), - Port: int(port), - }, - running: true, + running: true, } hub, err := udp.ListenUDP(address, port, udp.ListenOption{Callback: l.OnReceive}) if err != nil { @@ -92,7 +87,7 @@ func (this *Listener) OnReceive(payload *alloc.Buffer, session *proxy.SessionInf if err != nil { log.Error("KCP|Listener: Failed to create authenticator: ", err) } - conn = NewConnection(conv, writer, this.localAddr, srcAddr, auth) + conn = NewConnection(conv, writer, this.Addr().(*net.UDPAddr), srcAddr, auth) select { case this.awaitingConns <- conn: case <-time.After(time.Second * 5): @@ -159,7 +154,7 @@ func (this *Listener) ActiveConnections() int { // Addr returns the listener's network address, The Addr returned is shared by all invocations of Addr, so do not modify it. func (this *Listener) Addr() net.Addr { - return this.localAddr + return this.hub.Addr() } type Writer struct { diff --git a/transport/internet/udp/hub.go b/transport/internet/udp/hub.go index 460589df..31b6f0cb 100644 --- a/transport/internet/udp/hub.go +++ b/transport/internet/udp/hub.go @@ -104,3 +104,7 @@ func (this *UDPHub) Running() bool { func (this *UDPHub) Connection() net.Conn { return this.conn } + +func (this *UDPHub) Addr() net.Addr { + return this.conn.LocalAddr() +}