#!/usr/bin/perl use strict; use warnings; use threads; use threads::shared; use Net::Pcap; my $err; my $dev = Net::Pcap::lookupdev(\&err); my ($address,$netmask); Net::Pcap::lookupnet($dev,\$address,\$netmask,\$err); my $filter; print "threads version -> ".$threads::VERSION." threads::shared version -> ".$threads::shared::VERSION."\n"; my $capobj:shared = &share(Net::Pcap::open_live($dev,1024,0,0,\$err)); print "shared $capobj\n"; my $capthread = threads->new(\&capture); sleep 5; Net::Pcap::breakloop($capobj); print "$capobj breakloop\n"; $capthread->join(); print "Capture thread finalized\n"; sub capture { print "capture->$capobj\n"; Net::Pcap::compile($capobj,\$filter,'host XX.XX.XX.XX && port 7777 && udp',1,$netmask); Net::Pcap::setfilter($capobj,$filter); Net::Pcap::loop($capobj,0,\&capture_callback, 0); print "Outside the loop\n"; Net::Pcap::close($capobj); } sub capture_callback { }