|
@@ -5,15 +5,10 @@
|
|
|
*/
|
|
|
package listenbuffer
|
|
|
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
- "net"
|
|
|
- "time"
|
|
|
-)
|
|
|
+import "net"
|
|
|
|
|
|
-// NewListenBuffer returns a listener listening on addr with the protocol. It sets the
|
|
|
-// timeout to wait on first connection before an error is returned
|
|
|
-func NewListenBuffer(proto, addr string, activate chan struct{}, timeout time.Duration) (net.Listener, error) {
|
|
|
+// NewListenBuffer returns a listener listening on addr with the protocol.
|
|
|
+func NewListenBuffer(proto, addr string, activate chan struct{}) (net.Listener, error) {
|
|
|
wrapped, err := net.Listen(proto, addr)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
@@ -22,7 +17,6 @@ func NewListenBuffer(proto, addr string, activate chan struct{}, timeout time.Du
|
|
|
return &defaultListener{
|
|
|
wrapped: wrapped,
|
|
|
activate: activate,
|
|
|
- timeout: timeout,
|
|
|
}, nil
|
|
|
}
|
|
|
|
|
@@ -30,7 +24,6 @@ type defaultListener struct {
|
|
|
wrapped net.Listener // the real listener to wrap
|
|
|
ready bool // is the listner ready to start accpeting connections
|
|
|
activate chan struct{}
|
|
|
- timeout time.Duration // how long to wait before we consider this an error
|
|
|
}
|
|
|
|
|
|
func (l *defaultListener) Close() error {
|
|
@@ -47,15 +40,7 @@ func (l *defaultListener) Accept() (net.Conn, error) {
|
|
|
if l.ready {
|
|
|
return l.wrapped.Accept()
|
|
|
}
|
|
|
-
|
|
|
- select {
|
|
|
- case <-time.After(l.timeout):
|
|
|
- // close the connection so any clients are disconnected
|
|
|
- l.Close()
|
|
|
- return nil, fmt.Errorf("timeout (%s) reached waiting for listener to become ready", l.timeout.String())
|
|
|
- case <-l.activate:
|
|
|
- l.ready = true
|
|
|
- return l.Accept()
|
|
|
- }
|
|
|
- panic("unreachable")
|
|
|
+ <-l.activate
|
|
|
+ l.ready = true
|
|
|
+ return l.Accept()
|
|
|
}
|