From e906f3354d4d58ed9f441cef7c1761210d17541a Mon Sep 17 00:00:00 2001 From: Alexis PIRES Date: Mon, 6 Jan 2020 15:19:16 +0100 Subject: [PATCH] errors handling --- conn.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/conn.go b/conn.go index 57ce29b..6011341 100644 --- a/conn.go +++ b/conn.go @@ -78,7 +78,8 @@ func (cc *Conn) Flush() error { } // Trigger entities callback - for cc.checkReceive(conn) { + msg, err := cc.checkReceive(conn) + for msg { rmsg, err := conn.Receive() if err != nil { @@ -90,18 +91,23 @@ func (cc *Conn) Flush() error { e.HandleResponse(msg) } } + msg, err = cc.checkReceive(conn) } - return nil + return err } -func (cc *Conn) checkReceive(c *netlink.Conn) bool { +func (cc *Conn) checkReceive(c *netlink.Conn) (bool, error) { if cc.TestDial != nil { - return false + return false, nil } sc, err := c.SyscallConn() + if err != nil { + return false, fmt.Errorf("SyscallConn error: %w", err) + } + var n int sc.Control(func(fd uintptr) { @@ -113,10 +119,10 @@ func (cc *Conn) checkReceive(c *netlink.Conn) bool { }) if err == nil && n > 0 { - return true + return true, nil } - return false + return false, err } // FlushRuleset flushes the entire ruleset. See also