11diff --git a/collector/internal/telemetryapi/listener.go b/collector/internal/telemetryapi/listener.go
2- index 8499d4e..93ff0dc 100644
2+ index 8499d4e..62a6461 100644
33--- a/collector/internal/telemetryapi/listener.go
44+++ b/collector/internal/telemetryapi/listener.go
55@@ -17,18 +17,32 @@ package telemetryapi
@@ -37,12 +37,12 @@ index 8499d4e..93ff0dc 100644
3737
3838 // Listener is used to listen to the Telemetry API
3939 type Listener struct {
40- @@ -46,21 +60,44 @@ func NewListener(logger *zap.Logger) *Listener {
40+ @@ -46,26 +60,48 @@ func NewListener(logger *zap.Logger) *Listener {
4141 }
4242 }
4343
4444- func listenOnAddress() string {
45- + func (s *Listener) tryBindPort() (string, error) {
45+ + func (s *Listener) tryBindPort() (net.Listener, string, error) {
4646+ for i := 0; i < maxRetries; i++ {
4747+ port := getRandomPort()
4848+ address := listenOnAddress(port)
@@ -54,13 +54,12 @@ index 8499d4e..93ff0dc 100644
5454+ zap.String("address", address))
5555+ continue
5656+ }
57- + return "", err
57+ + return nil, "", err
5858+ }
59- + l.Close()
60- + return address, nil
59+ + return l, address, nil
6160+ }
6261+
63- + return "", fmt.Errorf("failed to find available port after %d attempts", maxRetries)
62+ + return nil, "", fmt.Errorf("failed to find available port after %d attempts", maxRetries)
6463+ }
6564+
6665+ func listenOnAddress(port string) string {
@@ -80,10 +79,16 @@ index 8499d4e..93ff0dc 100644
8079 // Start the server in a goroutine where the log events will be sent
8180 func (s *Listener) Start() (string, error) {
8281- address := listenOnAddress()
83- + address, err := s.tryBindPort()
82+ + listener, address, err := s.tryBindPort()
8483+ if err != nil {
8584+ return "", fmt.Errorf("failed to find available port: %w", err)
8685+ }
8786 s.logger.Info("Listening for requests", zap.String("address", address))
8887 s.httpServer = &http.Server{Addr: address}
8988 http.HandleFunc("/", s.httpHandler)
89+ go func() {
90+ - err := s.httpServer.ListenAndServe()
91+ + err := s.httpServer.Serve(listener)
92+ if err != http.ErrServerClosed {
93+ s.logger.Error("Unexpected stop on HTTP Server", zap.Error(err))
94+ s.Shutdown()
0 commit comments