diff --git a/Gopkg.lock b/Gopkg.lock index 80cf09e..acff973 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -30,7 +30,7 @@ "net/mux", "pool" ] - revision = "416571c55dbc32e13ce82c301a2a4b5a48ad7309" + revision = "280fa74053dee5311c46094f4bdefbf76d3fcbe2" [[projects]] branch = "frp" diff --git a/server/service.go b/server/service.go index 024b683..2f93f90 100644 --- a/server/service.go +++ b/server/service.go @@ -122,8 +122,8 @@ func NewService() (svr *Service, err error) { return } - svr.muxer = mux.NewMux() - go svr.muxer.Serve(ln) + svr.muxer = mux.NewMux(ln) + go svr.muxer.Serve() ln = svr.muxer.DefaultListener() svr.listener = frpNet.WrapLogListener(ln) diff --git a/vendor/github.com/fatedier/golib/net/mux/mux.go b/vendor/github.com/fatedier/golib/net/mux/mux.go index 07eec58..296392b 100644 --- a/vendor/github.com/fatedier/golib/net/mux/mux.go +++ b/vendor/github.com/fatedier/golib/net/mux/mux.go @@ -43,8 +43,9 @@ type Mux struct { mu sync.RWMutex } -func NewMux() (mux *Mux) { +func NewMux(ln net.Listener) (mux *Mux) { mux = &Mux{ + ln: ln, lns: make([]*listener, 0), } return @@ -123,15 +124,12 @@ func (mux *Mux) copyLns() []*listener { } // Serve handles connections from ln and multiplexes then across registered listeners. -func (mux *Mux) Serve(ln net.Listener) error { - mux.mu.Lock() - mux.ln = ln - mux.mu.Unlock() +func (mux *Mux) Serve() error { for { // Wait for the next connection. // If it returns a temporary error then simply retry. // If it returns any other error then exit immediately. - conn, err := ln.Accept() + conn, err := mux.ln.Accept() if err, ok := err.(interface { Temporary() bool }); ok && err.Temporary() {