mirror of https://github.com/v2ray/v2ray-core
fix kcp listener
parent
a5a70afdb8
commit
0bca6e8657
|
@ -22,7 +22,6 @@ type Listener struct {
|
||||||
sessions map[string]*Connection
|
sessions map[string]*Connection
|
||||||
awaitingConns chan *Connection
|
awaitingConns chan *Connection
|
||||||
hub *udp.UDPHub
|
hub *udp.UDPHub
|
||||||
localAddr *net.UDPAddr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewListener(address v2net.Address, port v2net.Port) (*Listener, error) {
|
func NewListener(address v2net.Address, port v2net.Port) (*Listener, error) {
|
||||||
|
@ -34,10 +33,6 @@ func NewListener(address v2net.Address, port v2net.Port) (*Listener, error) {
|
||||||
authenticator: auth,
|
authenticator: auth,
|
||||||
sessions: make(map[string]*Connection),
|
sessions: make(map[string]*Connection),
|
||||||
awaitingConns: make(chan *Connection, 64),
|
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})
|
hub, err := udp.ListenUDP(address, port, udp.ListenOption{Callback: l.OnReceive})
|
||||||
|
@ -92,7 +87,7 @@ func (this *Listener) OnReceive(payload *alloc.Buffer, session *proxy.SessionInf
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("KCP|Listener: Failed to create authenticator: ", err)
|
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 {
|
select {
|
||||||
case this.awaitingConns <- conn:
|
case this.awaitingConns <- conn:
|
||||||
case <-time.After(time.Second * 5):
|
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.
|
// 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 {
|
func (this *Listener) Addr() net.Addr {
|
||||||
return this.localAddr
|
return this.hub.Addr()
|
||||||
}
|
}
|
||||||
|
|
||||||
type Writer struct {
|
type Writer struct {
|
||||||
|
|
|
@ -104,3 +104,7 @@ func (this *UDPHub) Running() bool {
|
||||||
func (this *UDPHub) Connection() net.Conn {
|
func (this *UDPHub) Connection() net.Conn {
|
||||||
return this.conn
|
return this.conn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *UDPHub) Addr() net.Addr {
|
||||||
|
return this.conn.LocalAddr()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue