Before, the tapreader thread would just exit immediately after encountering the
first error, without notifying the main thread. Now, the tapreader thead never
exits itself, but tells the main thread to stop when more than ten errors are
encountered in a row.
DWORD len;
OVERLAPPED overlapped;
vpn_packet_t packet;
DWORD len;
OVERLAPPED overlapped;
vpn_packet_t packet;
logger(DEBUG_ALWAYS, LOG_DEBUG, "Tap reader running");
logger(DEBUG_ALWAYS, LOG_DEBUG, "Tap reader running");
} else {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
device, strerror(errno));
} else {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
device, strerror(errno));
+ errors++;
+ if(errors >= 10) {
+ EnterCriticalSection(&mutex);
+ running = false;
+ LeaveCriticalSection(&mutex);
+ }
+ usleep(1000000);
+ continue;
- EnterCriticalSection(&mutex);
packet.len = len;
packet.priority = 0;
packet.len = len;
packet.priority = 0;
+
+ EnterCriticalSection(&mutex);
route(myself, &packet);
event_flush_output();
LeaveCriticalSection(&mutex);
route(myself, &packet);
event_flush_output();
LeaveCriticalSection(&mutex);