os.File.SetReadDealine:文件类型不支持截止日期

时间:2018-09-20 03:36:56

标签: windows go

我使用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 个答案:

答案 0 :(得分:0)

对于1.11之前的Go,似乎为TCP,UDP和Unix域(也称为命名)套接字而不是文件定义了SetReadDeadline

请参见https://golang.org/pkg/net

但是它是为在1.11版本中的文件上使用而引入的(对不起,我错过了),请参见https://golang.org/pkg/os/#File.SetReadDeadline

我在CreateFile调用中没有看到非阻塞标志吗?我不知道这在MS Windows上如何工作...也许我错过了。截止日期需要这个..也许是可能的原因吗?