无法使用 net.Conn.Read

问题描述

我正在尝试使用 GO 与服务进行简单的 UNIX 套接字通信。为了测试,我创建了一个像这样的套接字:

$ nc -vlU /tmp/sock
Bound on /tmp/sock
Listening on /tmp/sock

在 GO 中,我 net.Dial 并尝试写一些东西,然后阅读。我在 nc 控制台中看到写入的数据,所以我知道这是有效的。但是 net.Conn.Read 操作似乎是非阻塞的,并且会立即以零长度返回。从我读过的所有内容和我看到的示例来看,此操作应该会阻塞。

buf := make([]byte,4096)
ctl,err := net.Dial("unix","/tmp/sock")
for {
    ctl.Write([]byte("test write\n"))
    n,err := ctl.Read(buf)
    fmt.Printf("Len:%v,Data:%v,err:%v",n,buf,err)
}

我看到连接成功并写入数据...

Connection received on /tmp/sock
test write
test write
test write
test write
...

但是GO控制台循环没有阻塞,报告零长度并且没有错误

Len:0,Data:[],err:<nil>
Len:0,err:<nil>
...

当然,如果我在 nc 控制台中输入任何内容,GO 程序输出中不会发生任何有趣的事情。

知道我做错了什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)