code: func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) {
  	fullConf := *config
  	fullConf.SetDefaults()
  	s := &connection{
  		sshConn: sshConn{conn: c},
  	}
  	perms, err := s.serverHandshake(&fullConf)
  	if err != nil {
  		c.Close()
  		return nil, nil, nil, err
  	}
  	return &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil
  }
docs: // NewServerConn starts a new SSH server with c as the underlying
  // transport.  It starts with a handshake and, if the handshake is
  // unsuccessful, it closes the connection and returns an error.  The
  // Request and NewChannel channels must be serviced, or the connection
  // will hang.