sockets - 如何从 os.Error 获取 os.Errno?其他使用 os.Timeout 的方法?

标签 sockets error-handling go

net.Conn接口(interface)提供了 SetTimeout 方法,我应该用 os.Timeout 检查返回的错误.但是我看不到在返回的 os.Error 上调用 os.Timeout 的方法。

(我得到的 os.Error 是 read unix @: Resource temporarily unavailable,它似乎由两部分组成:超时函数的描述和 strerrorEAGAIN 的描述。我试过 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/

相关文章:

sockets - Windows Phone 7.1 Mango 和 NetworkStream。包含在内吗?有什么好的选择吗?

sockets - 无限循环监听套接字

python - 简单客户端-服务器脚本不起作用,尝试连接时出现超时错误10060

php - 如何在 PHP 中使用 JQuery AJAX 调用触发 "error"回调

go - 试图减小Go程序的可执行文件大小

go - 解析时区为 “GMT+0000”的时间字符串时出错

java - 在服务器模式下运行 stanford NER 分类器

parsing - clojure源代码在宏中的位置

asp.net-mvc - 将 application/json 绑定(bind)到 asp.net mvc 中的 POCO 对象,序列化异常

struct - 嵌套结构初始化文字