github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/tsa/tsacmd/server_runner.go (about) 1 package tsacmd 2 3 import ( 4 "fmt" 5 "net" 6 "os" 7 8 "code.cloudfoundry.org/lager" 9 ) 10 11 type serverRunner struct { 12 logger lager.Logger 13 14 server *server 15 16 listenAddr string 17 } 18 19 func (runner serverRunner) Run(signals <-chan os.Signal, ready chan<- struct{}) error { 20 listener, err := net.Listen("tcp", runner.listenAddr) 21 if err != nil { 22 return fmt.Errorf("failed to listen on %s: %s", runner.listenAddr, err) 23 } 24 25 runner.logger.Info("listening") 26 27 close(ready) 28 29 exited := make(chan struct{}) 30 31 go func() { 32 defer close(exited) 33 runner.server.Serve(listener) 34 }() 35 36 for { 37 select { 38 case <-exited: 39 return nil 40 case <-signals: 41 listener.Close() 42 } 43 } 44 }