123456789101112131415161718192021222324252627282930313233343536373839 |
- package grace
- import (
- "errors"
- "net"
- "sync"
- )
- type graceConn struct {
- net.Conn
- server *Server
- m sync.Mutex
- closed bool
- }
- func (c *graceConn) Close() (err error) {
- defer func() {
- if r := recover(); r != nil {
- switch x := r.(type) {
- case string:
- err = errors.New(x)
- case error:
- err = x
- default:
- err = errors.New("Unknown panic")
- }
- }
- }()
- c.m.Lock()
- if c.closed {
- c.m.Unlock()
- return
- }
- c.server.wg.Done()
- c.closed = true
- c.m.Unlock()
- return c.Conn.Close()
- }
|