net.Conn接口(interface)提供了 SetTimeout 方法,我应该用 os.Timeout 检查返回的错误.但是我看不到在返回的 os.Error 上调用 os.Timeout 的方法。
(我得到的 os.Error 是 read unix @: Resource temporarily unavailable
,它似乎由两部分组成:超时函数的描述和 strerror
对 EAGAIN
的描述。我试过 err == os.EAGAIN
它不起作用,可能是因为 os.Error 中的额外信息)。
最佳答案
Go tutorial 的“I/O 包”部分有这个片段:
func OpenFile(name string, mode int, perm uint32) (file *File, err os.Error) {
r, e := syscall.Open(name, mode, perm)
if e != 0 {
err = os.Errno(e)
}
return newFile(r, name), err
}
syscall.Open()
有这个签名:
func Open(path string, mode int, perm uint32) (fd int, errno int)
所以我认为可以安全地假设 os.Error
仍然只是那个整数错误代码,只是添加了一些错误,并且您检查它的方法是正确的。
为了调查为什么 err == os.EAGAIN
对您不起作用,我将错误打印为 int
类型的值,然后 grep 了您平台的 errno.h
打印值的文件。
关于sockets - 如何从 os.Error 获取 os.Errno?其他使用 os.Timeout 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7939300/