]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
tun: windows: Make writing persistent too
authorSimon Rozman <simon@rozman.si>
Fri, 22 Mar 2019 11:44:14 +0000 (12:44 +0100)
committerSimon Rozman <simon@rozman.si>
Fri, 22 Mar 2019 12:52:51 +0000 (13:52 +0100)
Signed-off-by: Simon Rozman <simon@rozman.si>
tun/tun_windows.go

index ce6ec8c9710206572862839fdc55b87f1b3ab3ee..9888e86975c111bbbcd3c98fe52a15b9ba6f6af6 100644 (file)
@@ -284,24 +284,26 @@ func (tun *NativeTun) Flush() error {
                return nil
        }
 
-       // Get TUN data pipe.
-       _, file, err := tun.getTUN()
-       if err != nil {
-               return err
-       }
+       for {
+               // Get TUN data pipe.
+               _, file, err := tun.getTUN()
+               if err != nil {
+                       return err
+               }
 
-       // Flush write buffer.
-       _, err = file.Write(tun.wrBuff.data[:tun.wrBuff.offset])
-       tun.wrBuff.packetNum = 0
-       tun.wrBuff.offset = 0
-       if err != nil {
-               if tun.shouldReopenHandle(err) {
-                       tun.closeTUN()
-                       return nil
+               // Flush write buffer.
+               _, err = file.Write(tun.wrBuff.data[:tun.wrBuff.offset])
+               tun.wrBuff.packetNum = 0
+               tun.wrBuff.offset = 0
+               if err != nil {
+                       if tun.shouldReopenHandle(err) {
+                               tun.closeTUN()
+                               continue
+                       }
+                       return err
                }
-               return err
+               return nil
        }
-       return nil
 }
 
 func (tun *NativeTun) putTunPacket(buff []byte) error {