diff --git a/overlay/tun_android.go b/overlay/tun_android.go index 3bea907..321aec8 100644 --- a/overlay/tun_android.go +++ b/overlay/tun_android.go @@ -28,11 +28,13 @@ func newTunFromFd(l *logrus.Logger, deviceFd int, cidr *net.IPNet, _ int, routes return nil, err } + // XXX Android returns an fd in non-blocking mode which is necessary for shutdown to work properly. + // Be sure not to call file.Fd() as it will set the fd to blocking mode. file := os.NewFile(uintptr(deviceFd), "/dev/net/tun") return &tun{ ReadWriteCloser: file, - fd: int(file.Fd()), + fd: deviceFd, cidr: cidr, l: l, routeTree: routeTree,