fix: resolve critical bugs and refactor code structure

P0 Fixes:
- Fix potential panic in factory.go due to unsafe type assertion
- Fix VIP CIDR mask being lost during parsing (was hardcoded to /32)

P1 Fixes:
- Fix go.mod incorrect indirect dependency markers
- Fix receiveLoop blocking issue preventing graceful shutdown

Refactoring:
- Split state.go into state.go, timer.go, priority.go, history.go
- Split monitor.go into monitor.go and manager.go
- Add IncreasePriority() method for complete priority adjustment
- Fix go vet format string warning in test.go

🤖 Generated with [Qoder][https://qoder.com]
This commit is contained in:
loveuer
2026-03-04 00:14:47 -08:00
parent 894ddb53d3
commit 94c1c81ee0
12 changed files with 412 additions and 290 deletions

View File

@@ -5,6 +5,7 @@ import (
"net"
"os"
"syscall"
"time"
"golang.org/x/net/ipv4"
)
@@ -14,10 +15,11 @@ const (
)
type Socket struct {
conn *ipv4.RawConn
iface *net.Interface
localIP net.IP
groupIP net.IP
conn *ipv4.RawConn
packetConn net.PacketConn
iface *net.Interface
localIP net.IP
groupIP net.IP
}
func NewSocket(ifaceName string) (*Socket, error) {
@@ -56,9 +58,8 @@ func NewSocket(ifaceName string) (*Socket, error) {
}
file := os.NewFile(uintptr(fd), "vrrp-socket")
defer file.Close()
packetConn, err := net.FilePacketConn(file)
file.Close()
if err != nil {
return nil, fmt.Errorf("failed to create packet connection: %w", err)
}
@@ -86,10 +87,11 @@ func NewSocket(ifaceName string) (*Socket, error) {
}
return &Socket{
conn: rawConn,
iface: iface,
localIP: localIP,
groupIP: groupIP,
conn: rawConn,
packetConn: packetConn,
iface: iface,
localIP: localIP,
groupIP: groupIP,
}, nil
}
@@ -133,6 +135,10 @@ func (s *Socket) Receive() (*VRRPPacket, net.IP, error) {
return pkt, header.Src, nil
}
func (s *Socket) SetReadDeadline(t time.Time) error {
return s.packetConn.SetReadDeadline(t)
}
func (s *Socket) Close() error {
if err := s.conn.LeaveGroup(s.iface, &net.IPAddr{IP: s.groupIP}); err != nil {
return err