realListener => FileListener

This commit is contained in:
Naitik Shah 2013-03-25 14:38:05 -07:00
parent e40cf41eb0
commit d0382a39e6

View File

@ -51,15 +51,17 @@ type Listener interface {
File() (f *os.File, err error) File() (f *os.File, err error)
} }
// A realListener is a real file backed net.Listener. // A FileListener is a file backed net.Listener.
type realListener interface { type FileListener interface {
net.Listener net.Listener
// Will return the underlying file representing this Listener.
File() (f *os.File, err error) File() (f *os.File, err error)
} }
// A goroutine based counter that provides graceful Close for listeners. // A goroutine based counter that provides graceful Close for listeners.
type listener struct { type listener struct {
realListener FileListener
closed bool // Indicates we're already closed. closed bool // Indicates we're already closed.
closeRequest chan bool // Send a bool here to indicate we want to Close. closeRequest chan bool // Send a bool here to indicate we want to Close.
allClosed chan bool // Receive from here will indicate a clean Close. allClosed chan bool // Receive from here will indicate a clean Close.
@ -78,9 +80,9 @@ func (c conn) Close() error {
} }
// Wraps an existing File listener to provide a graceful Close() process. // Wraps an existing File listener to provide a graceful Close() process.
func NewListener(l realListener) Listener { func NewListener(l FileListener) Listener {
i := &listener{ i := &listener{
realListener: l, FileListener: l,
closeRequest: make(chan bool), closeRequest: make(chan bool),
allClosed: make(chan bool), allClosed: make(chan bool),
counter: make(chan bool), counter: make(chan bool),
@ -120,14 +122,14 @@ func (l *listener) CloseRequest() {
func (l *listener) Close() error { func (l *listener) Close() error {
l.CloseRequest() l.CloseRequest()
return l.realListener.Close() return l.FileListener.Close()
} }
func (l *listener) Accept() (net.Conn, error) { func (l *listener) Accept() (net.Conn, error) {
if l.closed == true { if l.closed == true {
return nil, ErrAlreadyClosed return nil, ErrAlreadyClosed
} }
c, err := l.realListener.Accept() c, err := l.FileListener.Accept()
if err != nil { if err != nil {
if strings.HasSuffix(err.Error(), errClosed) { if strings.HasSuffix(err.Error(), errClosed) {
return nil, ErrAlreadyClosed return nil, ErrAlreadyClosed