diff --git a/lib/gat/modules/net_listener/module.go b/lib/gat/modules/net_listener/module.go index 91b4f6dabdc2be2db6493a5783d978c50ef80909..e214c1c1212943059c5822c2b81b9ff02517a49f 100644 --- a/lib/gat/modules/net_listener/module.go +++ b/lib/gat/modules/net_listener/module.go @@ -15,6 +15,7 @@ type Module struct { Config listener net.Listener + closed chan struct{} accepted chan<- gat.AcceptedConn } @@ -26,6 +27,8 @@ func (T *Module) Start() error { return nil } + T.closed = make(chan struct{}) + var err error T.listener, err = net.Listen(T.Network, T.Address) if err != nil { @@ -40,6 +43,7 @@ func (T *Module) Stop() error { if err := T.listener.Close(); err != nil { return err } + close(T.closed) return nil } @@ -61,10 +65,13 @@ func (T *Module) accept(raw net.Conn) { log.Printf("failed to accept conn: %v", err) return } - _ = params // TODO(garet) - T.accepted <- gat.AcceptedConn{ + select { + case T.accepted <- gat.AcceptedConn{ Conn: conn, Params: params, + }: + case <-T.closed: + _ = conn.Close() } }