mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-01-02 15:36:41 -05:00
fix command listener
This commit is contained in:
parent
c05dade00a
commit
c1fc7c738a
@ -10,6 +10,7 @@ import (
|
|||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"v2ray.com/core"
|
"v2ray.com/core"
|
||||||
"v2ray.com/core/common"
|
"v2ray.com/core/common"
|
||||||
|
"v2ray.com/core/common/signal"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Commander struct {
|
type Commander struct {
|
||||||
@ -58,6 +59,7 @@ func (c *Commander) Start() error {
|
|||||||
|
|
||||||
listener := &OutboundListener{
|
listener := &OutboundListener{
|
||||||
buffer: make(chan net.Conn, 4),
|
buffer: make(chan net.Conn, 4),
|
||||||
|
done: signal.NewDone(),
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -11,26 +11,39 @@ import (
|
|||||||
|
|
||||||
type OutboundListener struct {
|
type OutboundListener struct {
|
||||||
buffer chan net.Conn
|
buffer chan net.Conn
|
||||||
|
done *signal.Done
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *OutboundListener) add(conn net.Conn) {
|
func (l *OutboundListener) add(conn net.Conn) {
|
||||||
select {
|
select {
|
||||||
case l.buffer <- conn:
|
case l.buffer <- conn:
|
||||||
|
case <-l.done.C():
|
||||||
|
conn.Close()
|
||||||
default:
|
default:
|
||||||
conn.Close()
|
conn.Close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *OutboundListener) Accept() (net.Conn, error) {
|
func (l *OutboundListener) Accept() (net.Conn, error) {
|
||||||
c, open := <-l.buffer
|
select {
|
||||||
if !open {
|
case <-l.done.C():
|
||||||
return nil, newError("listener closed")
|
return nil, newError("listern closed")
|
||||||
|
case c := <-l.buffer:
|
||||||
|
return c, nil
|
||||||
}
|
}
|
||||||
return c, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *OutboundListener) Close() error {
|
func (l *OutboundListener) Close() error {
|
||||||
close(l.buffer)
|
l.done.Close()
|
||||||
|
L:
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case c := <-l.buffer:
|
||||||
|
c.Close()
|
||||||
|
default:
|
||||||
|
break L
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user