- if (poll_fds[0].revents & (POLLERR | POLLHUP | POLLNVAL))
- {
- DBG ("Pipe closed. Exiting.");
- syslog (LOG_NOTICE, "dns plugin: Pipe closed. Exiting.");
- break;
- }
- else if (poll_fds[0].revents & POLLOUT)
- {
- DBG ("Sending data..");
-
- DBG ("swrite (pipe_fd = %i, tr_queries = %i)", pipe_fd, tr_queries);
- if (swrite (pipe_fd, (const void *) &tr_queries, sizeof (tr_queries)) != 0)
- {
- DBG ("Writing to pipe_fd failed: %s", strerror (errno));
- syslog (LOG_ERR, "dns plugin: Writing to pipe_fd failed: %s",
- strerror (errno));
- return;
- }
-
- DBG ("swrite (pipe_fd = %i, tr_responses = %i)", pipe_fd, tr_responses);
- if (swrite (pipe_fd, (const void *) &tr_responses, sizeof (tr_responses)) != 0)
- {
- DBG ("Writing to pipe_fd failed: %s", strerror (errno));
- syslog (LOG_ERR, "dns plugin: Writing to pipe_fd failed: %s",
- strerror (errno));
- return;
- }
-
- counter_list_send (qtype_list, pipe_fd);
- counter_list_send (opcode_list, pipe_fd);
- counter_list_send (rcode_list, pipe_fd);
- }
-
- if (poll_fds[1].revents & (POLLERR | POLLHUP | POLLNVAL))
- {
- DBG ("pcap-device closed. Exiting.");
- syslog (LOG_ERR, "dns plugin: pcap-device closed. Exiting.");
- break;
- }
- else if (poll_fds[1].revents & (POLLIN | POLLPRI))
- {
- status = pcap_dispatch (pcap_obj,
- 10 /* Only handle 10 packets at a time */,
- handle_pcap /* callback */,
- NULL /* Whatever this means.. */);
- if (status < 0)
- {
- DBG ("pcap_dispatch failed: %s", pcap_geterr (pcap_obj));
- syslog (LOG_ERR, "dns plugin: pcap_dispatch failed: %s",
- pcap_geterr (pcap_obj));
- break;
- }
- }
- } /* while (42) */
-
- DBG ("child is exiting");
-
- close (pipe_fd);
- pipe_fd = -1;