code: func KCPListener(addr string, config *KCPConfig) (Listener, error) {
  	if config == nil {
  		config = &KCPConfig{}
  		*config = DefaultKCPConfig
  	}
  	config.Init()
  
  	ln, err := kcp.ListenWithOptions(addr,
  		blockCrypt(config.Key, config.Crypt, KCPSalt), config.DataShard, config.ParityShard)
  	if err != nil {
  		return nil, err
  	}
  	// if err = ln.SetDSCP(config.DSCP); err != nil {
  	// 	log.Log("[kcp]", err)
  	// }
  	if err = ln.SetReadBuffer(config.SockBuf); err != nil {
  		log.Log("[kcp]", err)
  	}
  	if err = ln.SetWriteBuffer(config.SockBuf); err != nil {
  		log.Log("[kcp]", err)
  	}
  
  	go snmpLogger(config.SnmpLog, config.SnmpPeriod)
  	if config.Signal {
  		go kcpSigHandler()
  	}
  
  	l := &kcpListener{
  		config:   config,
  		ln:       ln,
  		connChan: make(chan net.Conn, 1024),
  		errChan:  make(chan error, 1),
  	}
  	go l.listenLoop()
  
  	return l, nil
  }
docs: // KCPListener creates a Listener for KCP proxy server.