فهرست منبع

fix kcp listener

v2ray 9 سال پیش
والد
کامیت
0bca6e8657
2فایلهای تغییر یافته به همراه7 افزوده شده و 8 حذف شده
  1. 3 8
      transport/internet/kcp/listener.go
  2. 4 0
      transport/internet/udp/hub.go

+ 3 - 8
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 {

+ 4 - 0
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()
+}