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()
}