-static struct packetbuf {
- uint8_t data[MTU];
- length_t len;
-} *bufs;
-
-static int nbufs = 64;
-
-DWORD WINAPI tapreader(void *bla) {
- int sock, err, status;
- struct addrinfo *ai;
- struct addrinfo hint = {
- .ai_family = AF_UNSPEC,
- .ai_socktype = SOCK_STREAM,
- .ai_protocol = IPPROTO_TCP,
- .ai_flags = 0,
- };
- unsigned char bufno = 0;
- long len;
- OVERLAPPED overlapped;
-
- /* Open a socket to the parent process */
-
- err = getaddrinfo(NULL, myport, &hint, &ai);
-
- if(err || !ai) {
- logger(LOG_ERR, _("System call `%s' failed: %s"), "getaddrinfo", gai_strerror(errno));
- return -1;
- }
-
- sock = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
-
- if(sock < 0) {
- logger(LOG_ERR, _("System call `%s' failed: %s"), "socket", strerror(errno));
- freeaddrinfo(ai);
- return -1;
- }
+static void device_issue_read() {
+ device_read_overlapped.Offset = 0;
+ device_read_overlapped.OffsetHigh = 0;
+
+ int status;
+ for (;;) {
+ DWORD len;
+ status = ReadFile(device_handle, (void *)device_read_packet.data, MTU, &len, &device_read_overlapped);
+ if (!status) {
+ if (GetLastError() != ERROR_IO_PENDING)
+ logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
+ device, strerror(errno));
+ break;
+ }