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:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
9
main.go
9
main.go
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user