1
0
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:
源文雨
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 (
"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
}

View File

@@ -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()

View File

@@ -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")
}

View File

@@ -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")
}

View File

@@ -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)
}

View File

@@ -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()
}