use Net::Pcap; my $device = ... my $snaplen = ... my $timeout = ... * 1000 # in milliseconds * 1000 = seconds my $err; my $pcaprecv = Net::Pcap::pcap_open_live($device, $snaplen, 1, $timeout, \$err); my $recv_r; my %header; my $starttime = time; while (1) { my $ret = Net::Pcap::pcap_next_ex($pcaprecv, \%header, \$recv_r); if ($ret == 1) { # Found packet - do stuff } elsif ($ret == 0) { print "[Receive Timeout] "; last } else { print "[Receive Error] "; last } if ((time - $starttime) >= $timeout) { print "[Receive Timeout] "; last } }