]> Cypherpunks.ru repositories - govpn.git/blobdiff - src/cypherpunks.ru/govpn/tap_android.go
fix close by interrupt read, do not close multiple times
[govpn.git] / src / cypherpunks.ru / govpn / tap_android.go
index 292c17c5043bebbcc2219711758147181c4d6529..1530d2e2cae2047e5f6fa011bfe72b2b0c5f61b4 100644 (file)
@@ -53,6 +53,10 @@ func TapListenFileDescriptor(fd uintptr, ifaceName string, mtu int) *TAP {
                        bufZ = !bufZ
                        n, err = tap.dev.Read(buf)
                        if err != nil {
+                               if tap.closed {
+                                       return
+                               }
+
                                e, ok := err.(*os.PathError)
                                if ok && e.Err == syscall.EAGAIN {
                                        time.Sleep(time.Millisecond * 20)
@@ -63,7 +67,7 @@ func TapListenFileDescriptor(fd uintptr, ifaceName string, mtu int) *TAP {
                                        "func", logFuncPrefix + "TUN read sink loop",
                                        "name": tap.Name,
                                        "mtu":  mtu,
-                               }).Error("Can't read interface, stop")
+                               }).Error("Can not read interface, stop")
                                return
                                // TODO: need a way to warn consumer that something is wrong
                                // TODO: to force peer to just disconnect