This commit is contained in:
fatedier 2018-08-10 12:02:38 +08:00
parent f645082d72
commit 941ac25648
3 changed files with 7 additions and 9 deletions

2
Gopkg.lock generated
View File

@ -30,7 +30,7 @@
"net/mux",
"pool"
]
revision = "416571c55dbc32e13ce82c301a2a4b5a48ad7309"
revision = "280fa74053dee5311c46094f4bdefbf76d3fcbe2"
[[projects]]
branch = "frp"

View File

@ -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)

View File

@ -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() {