mirror of
https://github.com/fumiama/WireGold.git
synced 2026-06-05 07:50:24 +08:00
fix(wg): stop signal handling
This commit is contained in:
@@ -2,6 +2,7 @@ package link
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
"net/netip"
|
||||
@@ -49,7 +50,7 @@ func (m *Me) listenudp() (conn *net.UDPConn, err error) {
|
||||
logrus.Debugln("[listen] lock index", i)
|
||||
lbf := listenbuff[i*65536 : (i+1)*65536]
|
||||
n, addr, err := conn.ReadFromUDP(lbf)
|
||||
if m.loop == nil {
|
||||
if m.loop == nil || errors.Is(err, net.ErrClosed) {
|
||||
logrus.Warnln("[listen] quit listening")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -132,13 +132,19 @@ func (m *Me) EndPoint() net.Addr {
|
||||
func (m *Me) Close() error {
|
||||
m.loop = nil
|
||||
m.connections = nil
|
||||
_ = m.udpconn.Close()
|
||||
m.udpconn = nil
|
||||
if m.udpconn != nil {
|
||||
_ = m.udpconn.Close()
|
||||
m.udpconn = nil
|
||||
}
|
||||
m.router = nil
|
||||
m.recving.Destroy()
|
||||
m.recving = nil
|
||||
m.recved.Destroy()
|
||||
m.recved = nil
|
||||
if m.recving != nil {
|
||||
m.recving.Destroy()
|
||||
m.recving = nil
|
||||
}
|
||||
if m.recved != nil {
|
||||
m.recved.Destroy()
|
||||
m.recved = nil
|
||||
}
|
||||
if m.nic != nil {
|
||||
m.nic.Down()
|
||||
return m.nic.Close()
|
||||
|
||||
@@ -13,9 +13,9 @@ func (n *NIC) Up() {
|
||||
}
|
||||
|
||||
func (n *NIC) Down() {
|
||||
execute("ifconfig", n.ifce.Name(), "down")
|
||||
execute("route", "delete", n.subnet, "-interface", n.ifce.Name())
|
||||
for _, c := range n.cidrs {
|
||||
execute("route", "delete", c, "-interface", n.ifce.Name())
|
||||
}
|
||||
execute("ifconfig", n.ifce.Name(), "down")
|
||||
}
|
||||
|
||||
@@ -14,9 +14,9 @@ func (n *NIC) Up() {
|
||||
}
|
||||
|
||||
func (n *NIC) Down() {
|
||||
execute("/sbin/ip", "link", "set", "dev", n.ifce.Name(), "down")
|
||||
execute("/sbin/ip", "route", "del", n.subnet, "dev", n.ifce.Name())
|
||||
for _, c := range n.cidrs {
|
||||
execute("/sbin/ip", "route", "del", c, "dev", n.ifce.Name())
|
||||
}
|
||||
execute("/sbin/ip", "link", "set", "dev", n.ifce.Name(), "down")
|
||||
}
|
||||
|
||||
9
main.go
9
main.go
@@ -6,7 +6,9 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
base14 "github.com/fumiama/go-base16384"
|
||||
curve "github.com/fumiama/go-x25519"
|
||||
@@ -155,7 +157,12 @@ func main() {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
defer w.Stop()
|
||||
mc := make(chan os.Signal, 1)
|
||||
signal.Notify(mc, os.Interrupt, syscall.SIGQUIT, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-mc
|
||||
w.Stop()
|
||||
}()
|
||||
w.Run(upper.ServiceWireGold, upper.ServiceWireGold)
|
||||
}
|
||||
|
||||
|
||||
@@ -56,11 +56,12 @@ func (wg *WG) Run(srcport, destport uint16) {
|
||||
wg.init(srcport, destport)
|
||||
_, err := wg.me.ListenNIC()
|
||||
if err != nil {
|
||||
logrus.Panicln(err)
|
||||
logrus.Warnln(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (wg *WG) Stop() {
|
||||
logrus.Warnln("[wg] stopping...")
|
||||
_ = wg.me.Close()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user