diff options
author | /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org> | 2005-05-02 10:59:36 +0000 |
---|---|---|
committer | /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org> | 2005-05-02 10:59:36 +0000 |
commit | 84d14671e9de8d1d9e587086efca623d843d4b63 (patch) | |
tree | 552d3aa5daa35ac60cad4ea9321bf4a8c6a60696 /libnfnetlink.c | |
parent | b23e39b219c0c6eb5bd8b536140471920a43f111 (diff) |
pablo neira's latest ctnetlink update
Diffstat (limited to 'libnfnetlink.c')
-rw-r--r-- | libnfnetlink.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/libnfnetlink.c b/libnfnetlink.c index 4bb3362..531fd0a 100644 --- a/libnfnetlink.c +++ b/libnfnetlink.c @@ -183,6 +183,7 @@ int nfnl_listen(struct nfnl_handle *nfnlh, struct iovec iov; int remain; struct nlmsghdr *h; + struct nlmsgerr *msgerr; struct msghdr msg = { (void *)&nladdr, sizeof(nladdr), @@ -228,6 +229,17 @@ int nfnl_listen(struct nfnl_handle *nfnlh, return -1; } + /* end of messages reached, let's return */ + if (h->nlmsg_type == NLMSG_DONE) + return -100; + + /* Break the loop if success is explicitely + * reported via NLM_F_ACK flag set */ + if (h->nlmsg_type == NLMSG_ERROR) { + msgerr = NLMSG_DATA(h); + return msgerr->error; + } + err = handler(&nladdr, h, jarg); if (err < 0) return err; |