So after playing with libpcap a little more, it seems like I can start capturing packets before I actually start processing them with pcap_loop(). This is good news because the capturing doesn't block the application. So I can send my SYN packets and do whatever sending needs to be done, and then process the captured packets at a more convenient time to get any answers back from the target. This will allow me to avoid using threads a little longer, leaving my attention squarely on scanning related topics. w00t!