+ logger(LOG_DEBUG, "Tap reader running");
+
+ /* Read from tap device and send to parent */
+
+ overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+ for(;;) {
+ overlapped.Offset = 0;
+ overlapped.OffsetHigh = 0;
+ ResetEvent(overlapped.hEvent);
+
+ status = ReadFile(device_handle, packet.data, MTU, &len, &overlapped);
+
+ if(!status) {
+ if(GetLastError() == ERROR_IO_PENDING) {
+ WaitForSingleObject(overlapped.hEvent, INFINITE);
+ if(!GetOverlappedResult(device_handle, &overlapped, &len, FALSE))
+ continue;
+ } else {
+ logger(LOG_ERR, "Error while reading from %s %s: %s", device_info,
+ device, strerror(errno));
+ return -1;
+ }
+ }