code: func (s *UDPSession) Close() error {
  	// remove current session from updater & listener(if necessary)
  	updater.removeSession(s)
  	if s.l != nil { // notify listener
  		s.l.closeSession(s.remote)
  	}
  
  	s.mu.Lock()
  	defer s.mu.Unlock()
  	if s.isClosed {
  		return errors.New(errBrokenPipe)
  	}
  	close(s.die)
  	s.isClosed = true
  	atomic.AddUint64(&DefaultSnmp.CurrEstab, ^uint64(0))
  	if s.l == nil { // client socket close
  		return s.conn.Close()
  	}
  	return nil
  }
docs: // Close closes the connection.