fix stop frps crashed

This commit is contained in:
HaidyCao 2020-11-07 13:46:58 +08:00
parent 05e71a13f2
commit 82b0a4053a

View File

@ -23,7 +23,6 @@ import (
"net" "net"
"net/http" "net/http"
"sort" "sort"
"reflect"
"strings" "strings"
"time" "time"
@ -331,25 +330,24 @@ func (svr *Service) Run() {
svr.HandleListener(svr.listener) svr.HandleListener(svr.listener)
} }
func closeListener(listeners ...net.Listener) (err error) {
for _, l := range listeners {
if l == nil {
continue
}
if err = l.Close(); err != nil {
return err
}
}
return nil
}
// Stop 停止服务 // Stop 停止服务
func (svr *Service) Stop() error { func (svr *Service) Stop() (err error) {
var err error if err = closeListener(svr.listener, svr.kcpListener, svr.websocketListener, svr.listener); err != nil {
value := reflect.ValueOf(svr.muxer) return err
lnValue := value.Elem().FieldByName("ln")
ln, ok := lnValue.Interface().(net.Listener)
if ok && ln != nil {
err = ln.Close()
}
if svr.listener != nil {
_ = svr.listener.Close()
}
if svr.websocketListener != nil {
_ = svr.websocketListener.Close()
}
if svr.kcpListener != nil {
_ = svr.kcpListener.Close()
} }
close(svr.closedCh) close(svr.closedCh)
svr.Closed = true svr.Closed = true