diff options
Diffstat (limited to 'ipacm/src/IPACM_ConntrackClient.cpp')
-rw-r--r-- | ipacm/src/IPACM_ConntrackClient.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/ipacm/src/IPACM_ConntrackClient.cpp b/ipacm/src/IPACM_ConntrackClient.cpp index 8a2499c..29afd50 100644 --- a/ipacm/src/IPACM_ConntrackClient.cpp +++ b/ipacm/src/IPACM_ConntrackClient.cpp @@ -482,12 +482,18 @@ void* IPACM_ConntrackClient::TCPRegisterWithConnTrack(void *) blocks waiting for events. */ IPACMDBG("Waiting for events\n"); +ctcatch: ret = nfct_catch(pClient->tcp_hdl); - if(ret == -1) + if((ret == -1) && (errno != ENOMSG)) { - IPACMERR("(%d)(%s)\n", ret, strerror(errno)); + IPACMERR("(%d)(%d)(%s)\n", ret, errno, strerror(errno)); return NULL; } + else + { + IPACMDBG("ctcatch ret:%d, errno:%d\n", ret, errno); + goto ctcatch; + } IPACMDBG("Exit from tcp thread\n"); @@ -568,14 +574,15 @@ void* IPACM_ConntrackClient::UDPRegisterWithConnTrack(void *) /* Block to catch events from net filter connection track */ ctcatch: ret = nfct_catch(pClient->udp_hdl); - if(ret == -1) + /* Due to conntrack dump, sequence number might mismatch for initial events. */ + if((ret == -1) && (errno != ENOMSG) && (errno != EILSEQ)) { - IPACMDBG("(%d)(%s)\n", ret, strerror(errno)); + IPACMDBG("(%d)(%d)(%s)\n", ret, errno, strerror(errno)); return NULL; } else { - IPACMDBG("ctcatch ret:%d\n", ret); + IPACMDBG("ctcatch ret:%d, errno:%d\n", ret, errno); goto ctcatch; } |