Hello,

I have a problem where my app pipes the output of tcpdump over a network connection and on slower connections it appears that libpcap sometimes doesn't write out the whole packet data segment. I believe this is being caused by the lack of error checking in pcap_dump():

(0.9.4) savefile.c
   1167 void
1168 pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
   1169 {
   1170         register FILE *f;
   1171         struct pcap_sf_pkthdr sf_hdr;
   1172
   1173         f = (FILE *)user;
   1174         sf_hdr.ts.tv_sec  = h->ts.tv_sec;
   1175         sf_hdr.ts.tv_usec = h->ts.tv_usec;
   1176         sf_hdr.caplen     = h->caplen;
   1177         sf_hdr.len        = h->len;
   1178         /* XXX we should check the return status */
   1179         (void)fwrite(&sf_hdr, sizeof(sf_hdr), 1, f);
   1180         (void)fwrite((char *)sp, h->caplen, 1, f);
   1181 }

As far as I can tell fwrite() will occasionally write short. I'm assuming because my pipe is "backed up" and libpcap can't write anymore data to it (though I would expect it to block in that case, so I'm not really sure what's causing it to temporarily write short data).

Is there any plan to change this behavior? It would be useful to me if it retried and wrote out the rest of the data, since I'm going to lose packets anyway, it would be nice if the output wasn't corrupted too.

Any info appreciated.

Thanks,

Cove




-
This is the tcpdump-workers list.
Visit https://lists.sandelman.ca/ to unsubscribe.

Reply via email to