@@ -77,7 +77,7 @@ struct rte_ring *fwd_pkt_to_process_ring;
7777
7878
7979static domain_fwd_addrs * resolve_dns_servers (char * domain_suffix ,char * dns_addrs );
80- static void * thread_fwd_pkt_process (void * socket );
80+ static void * thread_fwd_pkt_process ();
8181static void * thread_fwd_cache_expired_cleanup (void * arg );
8282
8383
@@ -303,18 +303,8 @@ int remote_sock_init(char * fwd_addrs, char * fwd_def_addr,int fwd_threads){
303303 /* create a separate thread to send task status as quick as possible */
304304 int i = 0 ;
305305 for ( ;i < fwd_threads ;i ++ ){
306- int * remote_sock = (int * ) xalloc (sizeof (int ));
307306 pthread_t * thread_id = (pthread_t * ) xalloc (sizeof (pthread_t ));
308- * remote_sock = socket (AF_INET , SOCK_DGRAM , IPPROTO_UDP );
309- struct timeval tv = {2 , 0 };
310-
311- if (setsockopt (* remote_sock , SOL_SOCKET , SO_RCVTIMEO , & tv , sizeof (tv )) < 0 ) {
312-
313- log_msg (LOG_ERR ,"socket option SO_RCVTIMEO not support\n" );
314- exit (-1 );
315- }
316-
317- pthread_create (thread_id , NULL , thread_fwd_pkt_process , (void * )remote_sock );
307+ pthread_create (thread_id , NULL , thread_fwd_pkt_process , NULL );
318308
319309 char tname [16 ];
320310 snprintf (tname , sizeof (tname ), "kdns_udp_fwd_%d" , i );
@@ -378,19 +368,36 @@ static domain_fwd_addrs * resolve_dns_servers(char * domain_suffix,char * dns_ad
378368 return fwd_addrs ;
379369}
380370
381- static int dns_do_remote_query (int remote_sock , char * buf , ssize_t len , dns_addr_t * id_addr ) {
371+ static int dns_do_remote_query (char * buf , ssize_t len , dns_addr_t * id_addr ) {
372+ int remote_sock = socket (AF_INET , SOCK_DGRAM , IPPROTO_UDP );
373+ if (remote_sock == -1 ) {
374+ log_msg (LOG_ERR ,"dns_do_remote_query socket errno=%d, errinfo=%s\n" , errno , strerror (errno ));
375+ return -1 ;
376+ }
377+
378+ struct timeval tv = {2 , 0 };
379+ if (setsockopt (remote_sock , SOL_SOCKET , SO_RCVTIMEO , & tv , sizeof (tv )) < 0 ) {
380+ log_msg (LOG_ERR ,"dns_do_remote_query setsockopt SO_RCVTIMEO errno=%d, errinfo=%s\n" , errno , strerror (errno ));
381+ close (remote_sock );
382+ return -1 ;
383+ }
384+
382385 if (-1 == sendto (remote_sock , buf , len , 0 , id_addr -> addr , id_addr -> addrlen )) {
383386 log_msg (LOG_ERR ,"dns_do_remote_query sendto errno=%d, errinfo=%s\n" , errno , strerror (errno ));
387+ close (remote_sock );
384388 return -1 ;
385389 }
390+
386391 struct sockaddr src_addr ;
387392 socklen_t src_len = sizeof (struct sockaddr );
388-
389393 len = recvfrom (remote_sock , buf , BUF_SIZE , 0 , & src_addr , & src_len );
390- if (len < 0 ) {
394+ if (len < 0 ) {
391395 log_msg (LOG_ERR ,"dns_do_remote_query recvfrom errno=%d, errinfo=%s\n" , errno , strerror (errno ));
396+ close (remote_sock );
397+ return -1 ;
392398 }
393399
400+ close (remote_sock );
394401 return len ;
395402}
396403
@@ -406,7 +413,7 @@ domain_fwd_addrs * find_zone_fwd_addrs(char * domain_name){
406413 return default_fwd_addrs ;
407414}
408415
409- static int do_dns_handle_remote (int socket , struct rte_mbuf * pkt , uint16_t old_id , uint16_t qtype , char * domain ) {
416+ static int do_dns_handle_remote (struct rte_mbuf * pkt , uint16_t old_id , uint16_t qtype , char * domain ) {
410417 struct ether_hdr * eth_hdr = NULL ;
411418 struct ipv4_hdr * ip4_hdr = NULL ;
412419 struct udp_hdr * udp_hdr = NULL ;
@@ -439,7 +446,7 @@ static int do_dns_handle_remote(int socket, struct rte_mbuf *pkt, uint16_t old_
439446 int i = 0 ;
440447 int retfwd = 0 ;
441448 for (;i < fwd_addrs -> servers_len ; i ++ ) {
442- retfwd = dns_do_remote_query (socket , buf_data ,len ,& fwd_addrs -> server_addrs [i ]);
449+ retfwd = dns_do_remote_query (buf_data ,len ,& fwd_addrs -> server_addrs [i ]);
443450 if (retfwd > 0 ) {
444451 break ;
445452 } else {
@@ -527,13 +534,11 @@ uint16_t fwd_pkts_dequeue(struct rte_mbuf **mbufs,uint16_t pkts_len)
527534}
528535
529536
530- static void * thread_fwd_pkt_process (void * socket ){
537+ static void * thread_fwd_pkt_process (){
531538
532539 log_msg (LOG_INFO ,"Starting thread_fwd_pkt_process \n" );
533540 struct fwd_pkt_input * etm ;
534541
535- int * remote_sock = (int * )socket ;
536-
537542 while (1 ){
538543
539544 int ret = rte_ring_mc_dequeue (fwd_pkt_to_process_ring , (void * * )& etm );
@@ -544,7 +549,7 @@ static void *thread_fwd_pkt_process(void *socket){
544549 }
545550
546551 rte_atomic64_inc (& fwd_stats .dns_fwd_rcv );
547- int fwd_len = do_dns_handle_remote (* remote_sock , etm -> pkt ,etm -> old_id ,etm -> qtype ,etm -> domain_name );
552+ int fwd_len = do_dns_handle_remote (etm -> pkt ,etm -> old_id ,etm -> qtype ,etm -> domain_name );
548553
549554 if (unlikely (fwd_len <= 0 )){
550555 log_msg (LOG_ERR ,"can not get rte_mbuf from do_dns_handle_remote\n" );
0 commit comments