summaryrefslogtreecommitdiffhomepage
path: root/tun/tun_windows.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-06-18 16:08:28 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2019-06-18 17:51:29 +0200
commitc69d02664924e11ffc5e6728638216a26b81c4ce (patch)
treecaec0bf19c41c8b120028d976e9683f318f19f65 /tun/tun_windows.go
parent1f48971a80f48257e478e532f6971d0557026120 (diff)
tun: windows: never retry open on Windows 10
Diffstat (limited to 'tun/tun_windows.go')
-rw-r--r--tun/tun_windows.go15
1 files changed, 12 insertions, 3 deletions
diff --git a/tun/tun_windows.go b/tun/tun_windows.go
index b88129d..05fc3df 100644
--- a/tun/tun_windows.go
+++ b/tun/tun_windows.go
@@ -55,6 +55,15 @@ func packetAlign(size uint32) uint32 {
return (size + (packetExchangeAlignment - 1)) &^ (packetExchangeAlignment - 1)
}
+var shouldRetryOpen = windows.RtlGetVersion().MajorVersion < 10
+
+func maybeRetry(x int) int {
+ if shouldRetryOpen {
+ return x
+ }
+ return 0
+}
+
//
// CreateTUN creates a Wintun adapter with the given name. Should a Wintun
// adapter with the same name exist, it is reused.
@@ -104,7 +113,7 @@ func CreateTUNWithRequestedGUID(ifname string, requestedGUID *windows.GUID) (Dev
}
func (tun *NativeTun) openTUN() error {
- retries := retryTimeout * retryRate
+ retries := maybeRetry(retryTimeout * retryRate)
if tun.close {
return os.ErrClosed
}
@@ -238,7 +247,7 @@ func (tun *NativeTun) Read(buff []byte, offset int) (int, error) {
default:
}
- retries := 1000
+ retries := maybeRetry(1000)
for {
if tun.rdBuff.offset+packetExchangeAlignment <= tun.rdBuff.avail {
// Get packet from the exchange buffer.
@@ -302,7 +311,7 @@ func (tun *NativeTun) Flush() error {
tun.wrBuff.packetNum = 0
tun.wrBuff.offset = 0
}()
- retries := 1000
+ retries := maybeRetry(1000)
for {
// Get TUN data pipe.