我有以下似乎无限期阻止的Golang代码
eagi := os.NewFile(uintptr(3), "/dev/stdeagi")
data := bufio.NewReaderSize(eagi, 64*1024)
...
data.WriteTo(conn) // Blocks indefinitely!
它似乎没有抛出错误 - 我的猜测是,我正在错误地访问FD。我的目的是访问进程'FD 3 for Asterisk EAGI。我也试过阅读替代路径fmt.Sprintf("/proc/%d/fd/3", os.Getpid())
,但这似乎表现得一样。我做错了什么?
答案 0 :(得分:1)
执行此操作的正确方法是syscall.Read(fd int, buf []byte) (n int, err error)
(doc)。关于我的问题,从Asterisk控制台内部,对sip show channelstats
的调用显示我没有完全收到RTP数据包,而且Read正在阻塞,因为实际上没有什么可读的。我的网络设置需要工作。