我使用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
错误发生在最后一行:文件类型不支持截止日期
答案 0 :(得分:0)
对于1.11之前的Go,似乎为TCP,UDP和Unix域(也称为命名)套接字而不是文件定义了SetReadDeadline
但是它是为在1.11版本中的文件上使用而引入的(对不起,我错过了),请参见https://golang.org/pkg/os/#File.SetReadDeadline
我在CreateFile调用中没有看到非阻塞标志吗?我不知道这在MS Windows上如何工作...也许我错过了。截止日期需要这个..也许是可能的原因吗?