improve udp listener
This commit is contained in:
parent
55d7b2e312
commit
7f581cb668
@ -35,11 +35,13 @@ 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()
|
||||||
|
|
||||||
return ln
|
return ln
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user