1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-22 03:20:30 +08:00

fix(wg): stop signal handling

This commit is contained in:
源文雨
2024-07-12 00:25:49 +09:00
parent 02ad99abb2
commit da6ffcc283
6 changed files with 26 additions and 11 deletions

View File

@@ -2,6 +2,7 @@ package link
import ( import (
"bytes" "bytes"
"errors"
"io" "io"
"net" "net"
"net/netip" "net/netip"
@@ -49,7 +50,7 @@ func (m *Me) listenudp() (conn *net.UDPConn, err error) {
logrus.Debugln("[listen] lock index", i) logrus.Debugln("[listen] lock index", i)
lbf := listenbuff[i*65536 : (i+1)*65536] lbf := listenbuff[i*65536 : (i+1)*65536]
n, addr, err := conn.ReadFromUDP(lbf) n, addr, err := conn.ReadFromUDP(lbf)
if m.loop == nil { if m.loop == nil || errors.Is(err, net.ErrClosed) {
logrus.Warnln("[listen] quit listening") logrus.Warnln("[listen] quit listening")
return return
} }

View File

@@ -132,13 +132,19 @@ func (m *Me) EndPoint() net.Addr {
func (m *Me) Close() error { func (m *Me) Close() error {
m.loop = nil m.loop = nil
m.connections = nil m.connections = nil
_ = m.udpconn.Close() if m.udpconn != nil {
m.udpconn = nil _ = m.udpconn.Close()
m.udpconn = nil
}
m.router = nil m.router = nil
m.recving.Destroy() if m.recving != nil {
m.recving = nil m.recving.Destroy()
m.recved.Destroy() m.recving = nil
m.recved = nil }
if m.recved != nil {
m.recved.Destroy()
m.recved = nil
}
if m.nic != nil { if m.nic != nil {
m.nic.Down() m.nic.Down()
return m.nic.Close() return m.nic.Close()

View File

@@ -13,9 +13,9 @@ func (n *NIC) Up() {
} }
func (n *NIC) Down() { func (n *NIC) Down() {
execute("ifconfig", n.ifce.Name(), "down")
execute("route", "delete", n.subnet, "-interface", n.ifce.Name()) execute("route", "delete", n.subnet, "-interface", n.ifce.Name())
for _, c := range n.cidrs { for _, c := range n.cidrs {
execute("route", "delete", c, "-interface", n.ifce.Name()) execute("route", "delete", c, "-interface", n.ifce.Name())
} }
execute("ifconfig", n.ifce.Name(), "down")
} }

View File

@@ -14,9 +14,9 @@ func (n *NIC) Up() {
} }
func (n *NIC) Down() { 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()) execute("/sbin/ip", "route", "del", n.subnet, "dev", n.ifce.Name())
for _, c := range n.cidrs { for _, c := range n.cidrs {
execute("/sbin/ip", "route", "del", c, "dev", n.ifce.Name()) execute("/sbin/ip", "route", "del", c, "dev", n.ifce.Name())
} }
execute("/sbin/ip", "link", "set", "dev", n.ifce.Name(), "down")
} }

View File

@@ -6,7 +6,9 @@ import (
"flag" "flag"
"fmt" "fmt"
"os" "os"
"os/signal"
"strings" "strings"
"syscall"
base14 "github.com/fumiama/go-base16384" base14 "github.com/fumiama/go-base16384"
curve "github.com/fumiama/go-x25519" curve "github.com/fumiama/go-x25519"
@@ -155,7 +157,12 @@ func main() {
os.Exit(0) 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) w.Run(upper.ServiceWireGold, upper.ServiceWireGold)
} }

View File

@@ -56,11 +56,12 @@ func (wg *WG) Run(srcport, destport uint16) {
wg.init(srcport, destport) wg.init(srcport, destport)
_, err := wg.me.ListenNIC() _, err := wg.me.ListenNIC()
if err != nil { if err != nil {
logrus.Panicln(err) logrus.Warnln(err)
} }
} }
func (wg *WG) Stop() { func (wg *WG) Stop() {
logrus.Warnln("[wg] stopping...")
_ = wg.me.Close() _ = wg.me.Close()
} }