errors handling
This commit is contained in:
parent
9dc224dc94
commit
e906f3354d
18
conn.go
18
conn.go
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue