From 3c7b7f217647a26756bc329a141011beb8cc4a7c Mon Sep 17 00:00:00 2001 From: despair86 Date: Fri, 5 Oct 2018 02:52:45 -0500 Subject: [PATCH] overlapped io pending is NOT an error --- llarp/ev_win32.hpp | 6 ++++-- vendor/libtuntap-master/tuntap-windows.c | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/llarp/ev_win32.hpp b/llarp/ev_win32.hpp index 313bb8df3..08a1018b5 100644 --- a/llarp/ev_win32.hpp +++ b/llarp/ev_win32.hpp @@ -366,13 +366,15 @@ struct llarp_win32_loop : public llarp_ev_loop add_ev(llarp::ev_io* ev, bool write) { uint8_t buf[1024]; + llarp::udp_listener *udp = nullptr; + llarp::tun *t = nullptr; ev->listener_id = reinterpret_cast< ULONG_PTR >(ev); memset(&buf, 0, 1024); switch(ev->fd.index()) { case 0: - llarp::udp_listener* udp = dynamic_cast(ev); + udp = dynamic_cast(ev); if(!::CreateIoCompletionPort((HANDLE)std::get< 0 >(ev->fd), iocpfd, ev->listener_id, 0)) { @@ -382,7 +384,7 @@ struct llarp_win32_loop : public llarp_ev_loop ::ReadFile((HANDLE)std::get<0>(ev->fd), &buf, 1024, nullptr, &udp->portfd); break; case 1: - llarp::tun* t = dynamic_cast(ev); + t = dynamic_cast(ev); if(!::CreateIoCompletionPort(std::get< 1 >(ev->fd), iocpfd, ev->listener_id, 0)) { diff --git a/vendor/libtuntap-master/tuntap-windows.c b/vendor/libtuntap-master/tuntap-windows.c index e58eccdab..83b7e880a 100644 --- a/vendor/libtuntap-master/tuntap-windows.c +++ b/vendor/libtuntap-master/tuntap-windows.c @@ -398,8 +398,13 @@ tuntap_read(struct device *dev, void *buf, size_t size) { int errcode = GetLastError(); - tuntap_log(TUNTAP_LOG_ERR, (const char *)formated_error(L"%1%0", errcode)); - return -1; + if (errcode != 997) + { + tuntap_log(TUNTAP_LOG_ERR, (const char *)formated_error(L"%1%0", errcode)); + return -1; + } + else + return 0; } return 0; @@ -412,10 +417,15 @@ tuntap_write(struct device *dev, void *buf, size_t size) if(WriteFile(dev->tun_fd, buf, (DWORD)size, &len, &dev->ovl) == 0) { - int errcode = GetLastError(); - - tuntap_log(TUNTAP_LOG_ERR, (const char *)formated_error(L"%1%0", errcode)); - return -1; + int errcode = GetLastError(); + + if (errcode != 997) + { + tuntap_log(TUNTAP_LOG_ERR, (const char *)formated_error(L"%1%0", errcode)); + return -1; + } + else + return 0; } return 0;