adding configuration for timeout and disable it by default
Docker-DCO-1.1-Signed-off-by: Isabel Jimenez <contact@isabeljimenez.com> (github: jimenez)
This commit is contained in:
parent
a518a10209
commit
c423739eb5
1 changed files with 6 additions and 21 deletions
|
@ -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.activate
|
||||
l.ready = true
|
||||
return l.Accept()
|
||||
}
|
||||
panic("unreachable")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue