From 498b747669e97e8af414a369433c04371396f08c Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Thu, 23 Mar 2023 10:23:18 +0100 Subject: Fix connection monitoring on Windows Linux requires su for `ip4:icmp` pings. Windows does not support `udp4` pings. Signed-off-by: Simon Rozman --- internal/failover/ping.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'internal/failover/ping.go') diff --git a/internal/failover/ping.go b/internal/failover/ping.go index 15d4adb..fb1df4e 100644 --- a/internal/failover/ping.go +++ b/internal/failover/ping.go @@ -18,14 +18,7 @@ var mtuOverhead = 28 type Pinger struct { listener net.PacketConn buffer []byte -} - -func NewPinger(size int) (*Pinger, error) { - l, err := icmp.ListenPacket("udp4", "0.0.0.0") - if err != nil { - return nil, errors.WrapPrefix(err, "failed creating ping", 0) - } - return &Pinger{listener: l, buffer: make([]byte, size-mtuOverhead)}, nil + gateway net.Addr } func (p Pinger) Read(deadline time.Time) error { @@ -52,7 +45,7 @@ func (p Pinger) Read(deadline time.Time) error { } } -func (p Pinger) Send(gateway string, seq int) error { +func (p Pinger) Send(seq int) error { errorMessage := fmt.Sprintf("failed sending ping, seq %d", seq) // Make a new ICMP message m := icmp.Message{ @@ -68,7 +61,7 @@ func (p Pinger) Send(gateway string, seq int) error { return errors.WrapPrefix(err, errorMessage, 0) } // And send it to the gateway IP! - _, err = p.listener.WriteTo(b, &net.UDPAddr{IP: net.ParseIP(gateway)}) + _, err = p.listener.WriteTo(b, p.gateway) if err != nil { return errors.WrapPrefix(err, errorMessage, 0) } -- cgit v1.2.3