更新关闭服务接口

This commit is contained in:
caohaidi 2018-11-27 14:53:32 +08:00
parent f3813c32a0
commit f930b62d9c
6 changed files with 47 additions and 6 deletions

BIN
cmd/cmd Executable file

Binary file not shown.

2
cmd/frps.ini Normal file
View File

@ -0,0 +1,2 @@
[common]
bind_port = 7000

25
cmd/main.go Normal file
View File

@ -0,0 +1,25 @@
package main
import (
"log"
"time"
"github.com/fatedier/frp/cmd/frp"
)
func main() {
frp.RunFrps("./frps.ini")
ch := make(chan bool)
go func() {
time.Sleep(time.Second * 5)
frp.StopFrps()
ch <- true
}()
<-ch
// frp.RunFrps("./frps.ini")
log.Println(frp.IsFrpsRunning())
ch = make(chan bool)
<-ch
}

View File

@ -85,6 +85,9 @@ type Service struct {
// Closed is service closed // Closed is service closed
Closed bool Closed bool
// close chan
closedCh chan bool
} }
func NewService() (svr *Service, err error) { func NewService() (svr *Service, err error) {
@ -95,6 +98,7 @@ func NewService() (svr *Service, err error) {
visitorManager: NewVisitorManager(), visitorManager: NewVisitorManager(),
tcpPortManager: ports.NewPortManager("tcp", cfg.ProxyBindAddr, cfg.AllowPorts), tcpPortManager: ports.NewPortManager("tcp", cfg.ProxyBindAddr, cfg.AllowPorts),
udpPortManager: ports.NewPortManager("udp", cfg.ProxyBindAddr, cfg.AllowPorts), udpPortManager: ports.NewPortManager("udp", cfg.ProxyBindAddr, cfg.AllowPorts),
closedCh: make(chan bool),
} }
svr.tcpGroupCtl = group.NewTcpGroupCtl(svr.tcpPortManager) svr.tcpGroupCtl = group.NewTcpGroupCtl(svr.tcpPortManager)
@ -235,26 +239,28 @@ func (svr *Service) Run() {
svr.HandleListener(svr.listener) svr.HandleListener(svr.listener)
} }
// Stop 停止服务
func (svr *Service) Stop() error { func (svr *Service) Stop() error {
err := svr.muxer.Close() err := svr.muxer.Close()
if err != nil { <-svr.closedCh
svr.Closed = true
return err return err
} }
return svr.listener.Close()
}
func (svr *Service) HandleListener(l frpNet.Listener) { func (svr *Service) HandleListener(l frpNet.Listener) {
defer func() { defer func() {
svr.Closed = true close(svr.closedCh)
log.Warn("Frps is Closed") log.Info("Frps is Closed")
}() }()
// Listen for incoming connections from client. // Listen for incoming connections from client.
for { for {
log.Info("Wait for new Connect")
c, err := l.Accept() c, err := l.Accept()
if err != nil { if err != nil {
log.Warn("Listener for incoming connections from client closed") log.Warn("Listener for incoming connections from client closed")
return return
} }
log.Info("New Conn: ", c, err)
// Start a new goroutine for dealing connections. // Start a new goroutine for dealing connections.
go func(frpConn frpNet.Conn) { go func(frpConn frpNet.Conn) {

View File

@ -45,10 +45,17 @@ func WrapLogListener(l net.Listener) Listener {
} }
func (logL *LogListener) Accept() (Conn, error) { func (logL *LogListener) Accept() (Conn, error) {
log.Info("call Accept")
c, err := logL.l.Accept() c, err := logL.l.Accept()
log.Info("Accept new conn: ", c)
return WrapConn(c), err return WrapConn(c), err
} }
// Close 关闭listener
func (logL *LogListener) Close() error {
return logL.l.Close()
}
// Custom listener // Custom listener
type CustomListener struct { type CustomListener struct {
conns chan Conn conns chan Conn

View File

@ -144,6 +144,7 @@ func (mux *Mux) Serve() error {
} }
if err != nil { if err != nil {
close(mux.defaultLn.c)
return err return err
} }