更新关闭服务接口
This commit is contained in:
parent
f3813c32a0
commit
f930b62d9c
2
cmd/frps.ini
Normal file
2
cmd/frps.ini
Normal file
@ -0,0 +1,2 @@
|
||||
[common]
|
||||
bind_port = 7000
|
25
cmd/main.go
Normal file
25
cmd/main.go
Normal 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
|
||||
}
|
@ -85,6 +85,9 @@ type Service struct {
|
||||
|
||||
// Closed is service closed
|
||||
Closed bool
|
||||
|
||||
// close chan
|
||||
closedCh chan bool
|
||||
}
|
||||
|
||||
func NewService() (svr *Service, err error) {
|
||||
@ -95,6 +98,7 @@ func NewService() (svr *Service, err error) {
|
||||
visitorManager: NewVisitorManager(),
|
||||
tcpPortManager: ports.NewPortManager("tcp", cfg.ProxyBindAddr, cfg.AllowPorts),
|
||||
udpPortManager: ports.NewPortManager("udp", cfg.ProxyBindAddr, cfg.AllowPorts),
|
||||
closedCh: make(chan bool),
|
||||
}
|
||||
svr.tcpGroupCtl = group.NewTcpGroupCtl(svr.tcpPortManager)
|
||||
|
||||
@ -235,26 +239,28 @@ func (svr *Service) Run() {
|
||||
svr.HandleListener(svr.listener)
|
||||
}
|
||||
|
||||
// Stop 停止服务
|
||||
func (svr *Service) Stop() error {
|
||||
err := svr.muxer.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return svr.listener.Close()
|
||||
<-svr.closedCh
|
||||
svr.Closed = true
|
||||
return err
|
||||
}
|
||||
|
||||
func (svr *Service) HandleListener(l frpNet.Listener) {
|
||||
defer func() {
|
||||
svr.Closed = true
|
||||
log.Warn("Frps is Closed")
|
||||
close(svr.closedCh)
|
||||
log.Info("Frps is Closed")
|
||||
}()
|
||||
// Listen for incoming connections from client.
|
||||
for {
|
||||
log.Info("Wait for new Connect")
|
||||
c, err := l.Accept()
|
||||
if err != nil {
|
||||
log.Warn("Listener for incoming connections from client closed")
|
||||
return
|
||||
}
|
||||
log.Info("New Conn: ", c, err)
|
||||
|
||||
// Start a new goroutine for dealing connections.
|
||||
go func(frpConn frpNet.Conn) {
|
||||
|
@ -45,10 +45,17 @@ func WrapLogListener(l net.Listener) Listener {
|
||||
}
|
||||
|
||||
func (logL *LogListener) Accept() (Conn, error) {
|
||||
log.Info("call Accept")
|
||||
c, err := logL.l.Accept()
|
||||
log.Info("Accept new conn: ", c)
|
||||
return WrapConn(c), err
|
||||
}
|
||||
|
||||
// Close 关闭listener
|
||||
func (logL *LogListener) Close() error {
|
||||
return logL.l.Close()
|
||||
}
|
||||
|
||||
// Custom listener
|
||||
type CustomListener struct {
|
||||
conns chan Conn
|
||||
|
1
vendor/github.com/fatedier/golib/net/mux/mux.go
generated
vendored
1
vendor/github.com/fatedier/golib/net/mux/mux.go
generated
vendored
@ -144,6 +144,7 @@ func (mux *Mux) Serve() error {
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
close(mux.defaultLn.c)
|
||||
return err
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user