tcpdump mailing list archives
parent-child process, selectable file descriptor and pcap
From: wen lui <esolvepolito () gmail com>
Date: Thu, 18 Apr 2013 04:10:55 +0200
I have a program, part of the source codes are:
handle = pcap_open_live(dev, BUFSIZ, 0, 0, errbuf);
pcap_compile(handle, &fp, filter_exp, 0, mask) == -1
pcap_setfilter(handle, &fp);
struct pcap_pkthdr pcap_header; // The header that pcap gives
us
const u_char *pcap_packet; // The actual packet
while(1){
n=fork();
if(n==0) { // child process
fd_set rdfds;
int pcap_fd = pcap_get_selectable_fd(pcap_handler);
for(;;){
FD_ZERO(&rdfds);
FD_SET(pcap_fd, &rdfds);
FD_SET(sd_proxy, &rdfds); // here is another fd
select(pcap_fd>sd_proxy?pcap_fd+1:sd_proxy+1,
&rdfds, NULL, NULL, NULL)
if(FD_ISSET(pcap_fd, &rdfds)) {
pcap_packet = pcap_next(pcap_handler,
&pcap_header);
if(pcap_packet !=NULL)
printf("capture one ACK packet with
length of %d\n", pcap_header.len);
printf("pcap_packet size is %d, length is
%d\n", sizeof(pcap_packet), pcap_header.len);
n = send(sd_proxy,
pcap_packet+ETHERNET_HDR_LEN, pcap_header.len-ETHERNET_HDR_LEN, 0);
if(n<0){
printf("send error: %s\n",
strerror(errno));
goto END;
} //if
....//blabla
}//if
}//for
// the child process will always exit the for loop after some
time
close(pcap_fd);
}//if
// parent process
}//while
for the first fork(), I mean for the first child process, it works fine
but for the second and following fork(), I always get "send error: Bad
address"
then I notice that the pcap_header.len is 0
what is the reason for this?
I think the problem may be:
1) there are parent-child process relationship
2) in each child process I used
int pcap_fd = pcap_get_selectable_fd(pcap_handler);
....
close(pcap_fd);
can anyone give some suggestions on this? thanks!
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers () lists tcpdump org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers
Current thread:
- parent-child process, selectable file descriptor and pcap wen lui (Apr 18)
- Re: parent-child process, selectable file descriptor and pcap Guy Harris (Apr 18)
