diff options
| author | lijia <[email protected]> | 2021-10-11 14:24:26 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2021-10-11 14:24:26 +0800 |
| commit | a493433f9126b9e9173e6a571fc7d921bd3bd516 (patch) | |
| tree | bb0a7f5f6368885768fafe8db666d05b14f9c37f | |
| parent | 2dda42342fad6818af3618a264a5775ffb2af17d (diff) | |
pcap模式出现未知错误后(不含主动调用pcap_breakloop), 要exit进程.v4.2.56
| -rw-r--r-- | src/packet_io/packet_io_pcap.c | 11 |
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;
}
|
