errors handling

This commit is contained in:
Alexis PIRES 2020-01-06 15:19:16 +01:00
parent 9dc224dc94
commit e906f3354d
1 changed files with 12 additions and 6 deletions

18
conn.go
View File

@ -78,7 +78,8 @@ func (cc *Conn) Flush() error {
} }
// Trigger entities callback // Trigger entities callback
for cc.checkReceive(conn) { msg, err := cc.checkReceive(conn)
for msg {
rmsg, err := conn.Receive() rmsg, err := conn.Receive()
if err != nil { if err != nil {
@ -90,18 +91,23 @@ func (cc *Conn) Flush() error {
e.HandleResponse(msg) 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 { if cc.TestDial != nil {
return false return false, nil
} }
sc, err := c.SyscallConn() sc, err := c.SyscallConn()
if err != nil {
return false, fmt.Errorf("SyscallConn error: %w", err)
}
var n int var n int
sc.Control(func(fd uintptr) { sc.Control(func(fd uintptr) {
@ -113,10 +119,10 @@ func (cc *Conn) checkReceive(c *netlink.Conn) bool {
}) })
if err == nil && n > 0 { if err == nil && n > 0 {
return true return true, nil
} }
return false return false, err
} }
// FlushRuleset flushes the entire ruleset. See also // FlushRuleset flushes the entire ruleset. See also