improve udp listener

This commit is contained in:
ginuerzh 2023-11-07 23:09:07 +08:00
parent 55d7b2e312
commit 7f581cb668
2 changed files with 23 additions and 6 deletions

View File

@ -33,12 +33,14 @@ func NewListener(conn net.PacketConn, cfg *ListenConfig) net.Listener {
}
ln := &listener{
conn: conn,
cqueue: make(chan net.Conn, cfg.Backlog),
connPool: newConnPool(cfg.TTL).WithLogger(cfg.Logger),
closed: make(chan struct{}),
errChan: make(chan error, 1),
config: cfg,
conn: conn,
cqueue: make(chan net.Conn, cfg.Backlog),
closed: make(chan struct{}),
errChan: make(chan error, 1),
config: cfg,
}
if cfg.KeepAlive {
ln.connPool = newConnPool(cfg.TTL).WithLogger(cfg.Logger)
}
go ln.listenLoop()

View File

@ -29,6 +29,10 @@ func (p *connPool) WithLogger(logger logger.Logger) *connPool {
}
func (p *connPool) Get(key any) (c *conn, ok bool) {
if p == nil {
return
}
v, ok := p.m.Load(key)
if ok {
c, ok = v.(*conn)
@ -37,14 +41,25 @@ func (p *connPool) Get(key any) (c *conn, ok bool) {
}
func (p *connPool) Set(key any, c *conn) {
if p == nil {
return
}
p.m.Store(key, c)
}
func (p *connPool) Delete(key any) {
if p == nil {
return
}
p.m.Delete(key)
}
func (p *connPool) Close() {
if p == nil {
return
}
select {
case <-p.closed:
return