func()

in src/sessionmanagerplugin/session/portsession/muxportforwarding.go [146:185]


func (p *MuxPortForwarding) initialize(log log.T, agentVersion string) (err error) {

	// open a network listener
	var listener net.Listener
	if listener, err = sessionutil.NewListener(log, p.socketFile); err != nil {
		return
	}

	var g errgroup.Group
	// start a go routine to accept connections on the network listener
	g.Go(func() error {
		if conn, err := listener.Accept(); err != nil {
			return err
		} else {
			p.mgsConn = &MgsConn{listener, conn}
		}
		return nil
	})

	// start a connection to the local network listener and set up client side of mux
	g.Go(func() error {
		if muxConn, err := net.Dial(listener.Addr().Network(), listener.Addr().String()); err != nil {
			return err
		} else {
			smuxConfig := smux.DefaultConfig()
			if version.DoesAgentSupportDisableSmuxKeepAlive(log, agentVersion) {
				// Disable smux KeepAlive or else it breaks Session Manager idle timeout.
				smuxConfig.KeepAliveDisabled = true
			}
			if muxSession, err := smux.Client(muxConn, smuxConfig); err != nil {
				return err
			} else {
				p.muxClient = &MuxClient{muxConn, muxSession}
			}
		}
		return nil
	})

	return g.Wait()
}