Files
netbird/client/vnc/server/service_agent_platform.go

30 lines
1.0 KiB
Go

//go:build darwin || windows
package server
// serviceAgent returns the one agent manager this server shares across every
// service-mode accept loop, constructing it on first use.
//
// One per server, not one per listener: the manager owns the agent process for
// the active session, so a second manager spawns a second agent on its own
// socket path, and each accept loop then proxies to a different one. Only one of
// those agents ends up serving, so connections arriving on the other listener
// are refused with the agent socket actively refusing the dial. A dual-stack
// server has two accept loops, since the v6 overlay listener is added after
// Start, which is how that happened.
//
// Returns nil once the server has stopped, and on platforms with no service
// mode.
func (s *Server) serviceAgent() sessionAgent {
s.serviceAgentMu.Lock()
defer s.serviceAgentMu.Unlock()
if s.serviceAgentStopped {
return nil
}
if s.serviceAgentMgr == nil {
s.serviceAgentMgr, s.serviceAgentStop = s.newServiceAgentManager()
}
return s.serviceAgentMgr
}