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{ ln := &listener{
conn: conn, conn: conn,
cqueue: make(chan net.Conn, cfg.Backlog), cqueue: make(chan net.Conn, cfg.Backlog),
connPool: newConnPool(cfg.TTL).WithLogger(cfg.Logger), closed: make(chan struct{}),
closed: make(chan struct{}), errChan: make(chan error, 1),
errChan: make(chan error, 1), config: cfg,
config: cfg, }
if cfg.KeepAlive {
ln.connPool = newConnPool(cfg.TTL).WithLogger(cfg.Logger)
} }
go ln.listenLoop() 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) { func (p *connPool) Get(key any) (c *conn, ok bool) {
if p == nil {
return
}
v, ok := p.m.Load(key) v, ok := p.m.Load(key)
if ok { if ok {
c, ok = v.(*conn) 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) { func (p *connPool) Set(key any, c *conn) {
if p == nil {
return
}
p.m.Store(key, c) p.m.Store(key, c)
} }
func (p *connPool) Delete(key any) { func (p *connPool) Delete(key any) {
if p == nil {
return
}
p.m.Delete(key) p.m.Delete(key)
} }
func (p *connPool) Close() { func (p *connPool) Close() {
if p == nil {
return
}
select { select {
case <-p.closed: case <-p.closed:
return return