From e7d09a31a43a3364f08d2367aeb1c0979b514e89 Mon Sep 17 00:00:00 2001 From: klaas Date: Sat, 2 Apr 2022 15:38:37 +0019 Subject: [PATCH] linux blocks until a packet arrives which the rest of the code does not expect --- src/network/net_pcap.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/network/net_pcap.c b/src/network/net_pcap.c index 52573907b..114fb72b0 100644 --- a/src/network/net_pcap.c +++ b/src/network/net_pcap.c @@ -122,6 +122,9 @@ static const unsigned char *(*f_pcap_next)(void *,void *); static int (*f_pcap_sendpacket)(void *,const unsigned char *,int); static void (*f_pcap_close)(void *); +#ifdef __linux__ +static int (*f_pcap_setnonblock)(void*, int, char*); +#endif static dllimp_t pcap_imports[] = { { "pcap_lib_version", &f_pcap_lib_version }, { "pcap_findalldevs", &f_pcap_findalldevs }, @@ -132,6 +135,9 @@ static dllimp_t pcap_imports[] = { { "pcap_next", &f_pcap_next }, { "pcap_sendpacket", &f_pcap_sendpacket }, { "pcap_close", &f_pcap_close }, +#ifdef __linux__ + { "pcap_setnonblock", &f_pcap_setnonblock }, +#endif { NULL, NULL }, }; @@ -382,6 +388,11 @@ net_pcap_reset(const netcard_t *card, uint8_t *mac) pcap_log(" Unable to open device: %s!\n", network_host); return(-1); } +#ifdef __linux__ + if (f_pcap_setnonblock((void*)pcap, 1, errbuf) != 0) + pcap_log("PCAP: failed nonblock %s\n", errbuf); +#endif + pcap_log("PCAP: interface: %s\n", network_host); /* Create a MAC address based packet filter. */