|
|
|
@ -117,6 +117,7 @@ type Server struct {
|
|
|
|
|
loopbackListener net.Listener // optional loopback for localapi and proxies
|
|
|
|
|
localAPIListener net.Listener // in-memory, used by localClient
|
|
|
|
|
localClient *tailscale.LocalClient // in-memory
|
|
|
|
|
localAPIServer *http.Server
|
|
|
|
|
logbuffer *filch.Filch
|
|
|
|
|
logtail *logtail.Logger
|
|
|
|
|
logid logid.PublicID
|
|
|
|
@ -329,6 +330,13 @@ func (s *Server) Close() error {
|
|
|
|
|
s.logbuffer.Close()
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
wg.Add(1)
|
|
|
|
|
go func() {
|
|
|
|
|
defer wg.Done()
|
|
|
|
|
if s.localAPIServer != nil {
|
|
|
|
|
s.localAPIServer.Shutdown(ctx)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
if _, isMemStore := s.Store.(*mem.Store); isMemStore && s.Ephemeral && s.lb != nil {
|
|
|
|
|
wg.Add(1)
|
|
|
|
@ -566,8 +574,9 @@ func (s *Server) start() (reterr error) {
|
|
|
|
|
lal := memnet.Listen("local-tailscaled.sock:80")
|
|
|
|
|
s.localAPIListener = lal
|
|
|
|
|
s.localClient = &tailscale.LocalClient{Dial: lal.Dial}
|
|
|
|
|
s.localAPIServer = &http.Server{Handler: lah}
|
|
|
|
|
go func() {
|
|
|
|
|
if err := http.Serve(lal, lah); err != nil {
|
|
|
|
|
if err := s.localAPIServer.Serve(lal); err != nil {
|
|
|
|
|
logf("localapi serve error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|