From 19bf62c21f460fa9dec8f4949c80e51036fd2435 Mon Sep 17 00:00:00 2001 From: "Quentin McGaw (desktop)" Date: Sun, 12 Sep 2021 13:32:50 +0000 Subject: [PATCH] Fix: set non block on TUN device --- internal/tun/create.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/internal/tun/create.go b/internal/tun/create.go index 419e6f0b..3143449d 100644 --- a/internal/tun/create.go +++ b/internal/tun/create.go @@ -14,7 +14,9 @@ type Creator interface { } var ( - ErrMknod = errors.New("cannot create TUN device file node") + ErrMknod = errors.New("cannot create TUN device file node") + ErrUnixOpen = errors.New("cannot Unix Open TUN device file") + ErrSetNonBlock = errors.New("cannot set non block to TUN device file descriptor") ) // Create creates a TUN device at the path specified. @@ -34,5 +36,16 @@ func (t *Tun) Create(path string) error { return fmt.Errorf("%w: %s", ErrMknod, err) } + fd, err := unix.Open(path, 0, 0) + if err != nil { + return fmt.Errorf("%w: %s", ErrUnixOpen, err) + } + + const nonBlocking = true + err = unix.SetNonblock(fd, nonBlocking) + if err != nil { + return fmt.Errorf("%w: %s", ErrSetNonBlock, err) + } + return nil }