summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-10-11 14:24:26 +0800
committerlijia <[email protected]>2021-10-11 14:24:26 +0800
commita493433f9126b9e9173e6a571fc7d921bd3bd516 (patch)
treebb0a7f5f6368885768fafe8db666d05b14f9c37f
parent2dda42342fad6818af3618a264a5775ffb2af17d (diff)
pcap模式出现未知错误后(不含主动调用pcap_breakloop), 要exit进程.v4.2.56
-rw-r--r--src/packet_io/packet_io_pcap.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/packet_io/packet_io_pcap.c b/src/packet_io/packet_io_pcap.c
index 6e1cb32..d2dcfad 100644
--- a/src/packet_io/packet_io_pcap.c
+++ b/src/packet_io/packet_io_pcap.c
@@ -806,6 +806,12 @@ static void pcap_clear_pkt_queue_left(int thread_index)
continue;
}
if(PCAP_OP_FLAG_PKT == pkt_queue_node.op_flag){
+ ret = (*g_pcap_work_fun)(&(pkt_queue_node.raw_pkt), pkt_queue_node.raw_pkt.route_dir, thread_index);
+ /* ����ģʽ�ҷ���ֵΪPASS, ��Ҫת���� */
+ if((g_pcap_topology_mode & __NET_CONN_SERIAL) && (PASS == ret)){
+ pcap_forward_pkt(thread_index, (unsigned char *)pkt_queue_node.raw_pkt.__lib_raw_pkt_data,
+ pkt_queue_node.raw_pkt.__lib_raw_pkt_len, pkt_queue_node.raw_pkt.route_dir);
+ }
PCAP_FREE((void *)(pkt_queue_node.raw_pkt.__lib_raw_pkt_data));
}
}
@@ -1380,6 +1386,7 @@ static void *pcap_io_thread(void *arg)
int pcap_ret;
char *no_use;
volatile int *stop_flag;
+ int exit_prog_flag = 0;
#if(__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__ >= 480) /* �汾�ж�, �ܶ��ϵͳ�޷����� */
#ifdef _GNU_SOURCE
@@ -1422,6 +1429,7 @@ static void *pcap_io_thread(void *arg)
__pcap_nodify_work_thread(PCAP_OP_FLAG_EOF);
printf("pcap err, %s\n", pcap_geterr(handle));
sapp_set_current_state(SAPP_STATE_READY_TO_EXIT);
+ exit_prog_flag = 1;
break;//after call pcap_breakloop()
}
}
@@ -1431,6 +1439,9 @@ static void *pcap_io_thread(void *arg)
if(g_pcap_exit_cb_fun){
(*g_pcap_exit_cb_fun)();
}
+ if(exit_prog_flag){
+ exit(1);
+ }
return NULL;
}