os.File.SetReadDealine: тип файла не поддерживает крайний срок - PullRequest
0 голосов
/ 20 сентября 2018

Я использую 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 голосов
/ 20 сентября 2018

для перехода до 1.11. SetReadDeadline, похоже, определен для сокетов TCP, UDP и Unix (именованных), а не для файлов

См. https://golang.org/pkg/net

Но он введен для использования вфайлы в 1.11 (извините, я пропустил это), см. https://golang.org/pkg/os/#File.SetReadDeadline

Я не вижу неблокирующий флаг в вашем вызове CreateFile?Я не знаю, как это работает в MS Windows ... может быть, я скучаю по нему.Крайний срок нуждается в этом .. может быть, возможная причина?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...