Compare commits
No commits in common. "5657c3c1e88d80d4da41e2b592eb961f064b8ddf" and "c644c61a8ed133ba352e64fa6609bb4a30893da0" have entirely different histories.
5657c3c1e8
...
c644c61a8e
1 changed files with 15 additions and 14 deletions
|
@ -6,7 +6,6 @@
|
|||
package tun
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
|
@ -131,7 +130,7 @@ func CreateTUN(name string, mtu int) (Device, error) {
|
|||
} else {
|
||||
for ifIndex = 0; ifIndex < 256; ifIndex += 1 {
|
||||
tunfile, err = os.OpenFile(fmt.Sprintf("/dev/tun%d", ifIndex), unix.O_RDWR, 0)
|
||||
if err == nil || !errors.Is(err, syscall.EBUSY) {
|
||||
if err == nil || !errorIsEBUSY(err) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -165,7 +164,7 @@ func CreateTUN(name string, mtu int) (Device, error) {
|
|||
uintptr(unsafe.Pointer(&ifheadmode)),
|
||||
)
|
||||
|
||||
if errno != 0 || ifheadmode == 0 {
|
||||
if errno != 0 || ifheadmode != 1 {
|
||||
tunfile.Close()
|
||||
return nil, fmt.Errorf("Unable to validate IFHEAD mode: %v (ifheadmode = %d)", errno, ifheadmode)
|
||||
}
|
||||
|
@ -250,15 +249,19 @@ func (tun *NativeTun) Read(buff []byte, offset int) (int, error) {
|
|||
return 0, err
|
||||
default:
|
||||
buff := buff[offset-4:]
|
||||
// buff := buff[offset:]
|
||||
n, err := tun.tunFile.Read(buff[:])
|
||||
if n < 4 {
|
||||
return 0, err
|
||||
}
|
||||
return n - 4, err
|
||||
// return n, err
|
||||
}
|
||||
}
|
||||
|
||||
func (tun *NativeTun) Write(buff []byte, offset int) (int, error) {
|
||||
|
||||
|
||||
// reserve space for header
|
||||
|
||||
buff = buff[offset-4:]
|
||||
|
@ -286,17 +289,15 @@ func (tun *NativeTun) Flush() error {
|
|||
}
|
||||
|
||||
func (tun *NativeTun) Close() error {
|
||||
var err1, err2 error
|
||||
tun.closeOnce.Do(func () {
|
||||
err1 = tun.tunFile.Close()
|
||||
if tun.routeSocket != -1 {
|
||||
unix.Shutdown(tun.routeSocket, unix.SHUT_RDWR)
|
||||
err2 = unix.Close(tun.routeSocket)
|
||||
tun.routeSocket = -1
|
||||
} else if tun.events != nil {
|
||||
close(tun.events)
|
||||
}
|
||||
})
|
||||
var err2 error
|
||||
err1 := tun.tunFile.Close()
|
||||
if tun.routeSocket != -1 {
|
||||
unix.Shutdown(tun.routeSocket, unix.SHUT_RDWR)
|
||||
err2 = unix.Close(tun.routeSocket)
|
||||
tun.routeSocket = -1
|
||||
} else if tun.events != nil {
|
||||
close(tun.events)
|
||||
}
|
||||
if err1 != nil {
|
||||
return err1
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue