我用的是win10和go1.11 windows/amd64
deviceid, err := getdeviceid(config.PlatformSpecificParams.ComponentID)
if err != nil {
return nil, err
}
path := "\\\\.\\Global\\" + deviceid + ".tap"
pathp, err := syscall.UTF16PtrFromString(path)
if err != nil {
return nil, err
}
fileFd, err := syscall.CreateFile( pathp,
syscall.GENERIC_READ|syscall.GENERIC_WRITE,
uint32(syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE),
nil,
syscall.OPEN_EXISTING,
syscall.FILE_ATTRIBUTE_SYSTEM|syscall.FILE_FLAG_OVERLAPPED,
0)
……
file := os.NewFile(uintptr(fileFd), "nic")
……
file.SetReadDeadline(time.Now().Add(t)) // [ERROR] file type does not support deadline
最后一行出现错误:文件类型不支持截止时间
最佳答案
对于 1.11 之前的 Go,SetReadDeadline 似乎是为 TCP、UDP 和 Unix 域(又名命名的)套接字定义的,而不是文件
但在 1.11 中它被引入用于文件(抱歉我错过了),参见 https://golang.org/pkg/os/#File.SetReadDeadline
我在您的 CreateFile 调用中没有看到非阻塞标志?我不知道这在 MS Windows 上是如何工作的……也许我错过了它。截止日期需要这个..也许是一个可能的原因?
关于windows - os.File.SetReadDealine : file type does not support deadline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417209/