@@ -23,7 +23,6 @@ import (
23
23
"net"
24
24
"net/http"
25
25
"strings"
26
- "sync"
27
26
"time"
28
27
29
28
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -100,7 +99,6 @@ func RunServer(server *http.Server, network string, stopCh <-chan struct{}) (int
100
99
network = "tcp"
101
100
}
102
101
103
- // first listen is synchronous (fail early!)
104
102
ln , err := net .Listen (network , server .Addr )
105
103
if err != nil {
106
104
return 0 , fmt .Errorf ("failed to listen on %v: %v" , server .Addr , err )
@@ -113,52 +111,29 @@ func RunServer(server *http.Server, network string, stopCh <-chan struct{}) (int
113
111
return 0 , fmt .Errorf ("invalid listen address: %q" , ln .Addr ().String ())
114
112
}
115
113
116
- lock := sync. Mutex {} // to avoid we close an old listener during a listen retry
114
+ // Stop the server by closing the listener
117
115
go func () {
118
116
<- stopCh
119
- lock .Lock ()
120
- defer lock .Unlock ()
121
117
ln .Close ()
122
118
}()
123
119
124
120
go func () {
125
121
defer utilruntime .HandleCrash ()
126
122
127
- for {
128
- var listener net.Listener
129
- listener = tcpKeepAliveListener {ln .(* net.TCPListener )}
130
- if server .TLSConfig != nil {
131
- listener = tls .NewListener (listener , server .TLSConfig )
132
- }
133
-
134
- err := server .Serve (listener )
135
- glog .Errorf ("Error serving %v (%v); will try again." , server .Addr , err )
136
-
137
- // listen again
138
- func () {
139
- lock .Lock ()
140
- defer lock .Unlock ()
141
- for {
142
- time .Sleep (15 * time .Second )
143
-
144
- ln , err = net .Listen (network , server .Addr )
145
- if err == nil {
146
- return
147
- }
148
- select {
149
- case <- stopCh :
150
- return
151
- default :
152
- }
153
- glog .Errorf ("Error listening on %v (%v); will try again." , server .Addr , err )
154
- }
155
- }()
156
-
157
- select {
158
- case <- stopCh :
159
- return
160
- default :
161
- }
123
+ var listener net.Listener
124
+ listener = tcpKeepAliveListener {ln .(* net.TCPListener )}
125
+ if server .TLSConfig != nil {
126
+ listener = tls .NewListener (listener , server .TLSConfig )
127
+ }
128
+
129
+ err := server .Serve (listener )
130
+
131
+ msg := fmt .Sprintf ("Stopped listening on %s" , tcpAddr .String ())
132
+ select {
133
+ case <- stopCh :
134
+ glog .Info (msg )
135
+ default :
136
+ panic (fmt .Sprintf ("%s due to error: %v" , msg , err ))
162
137
}
163
138
}()
164
139
0 commit comments