为了账号安全,请及时绑定邮箱和手机立即绑定

golang unix 套接字错误。拨号:资源暂时不可用

golang unix 套接字错误。拨号:资源暂时不可用

Go
繁星点点滴滴 2021-10-04 17:38:37
所以我正在尝试使用带有 fluentd 的 unix sockets 进行日志记录任务并随机发现,偶尔会出现错误拨号:{socket_name} 资源暂时不可用关于为什么会发生这种情况的任何想法?我尝试添加“重试”逻辑以减少错误,但有时仍会发生。另外,对于fluntd,我们使用unix sockets通信的默认配置func connect() {var connection net.Connvar err errorfor i := 0; i < retry_count; i++ {    connection, err = net.Dial("unix", path_to_socket)    if err == nil {        break    }    time.Sleep(time.Duration(math.Exp2(float64(retry_count))) * time.Millisecond)}if err != nil {    fmt.Println(err)} else {        connection.Write(data_to_send_socket)    }     defer connection.Close()}
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

Go 以非阻塞模式创建它的套接字,这意味着某些通常会阻塞的系统调用。在大多数情况下,它EAGAIN通过等待套接字准备好读/写来透明地处理错误(由“资源暂时不可用”消息指示的内容)。不过,它似乎没有这种connect调用逻辑Dial

如果侦听队列已满,则在连接到 UNIX 域套接字时可能connect会返回EAGAIN。如果客户端连接到它的速度比它接受它们的速度快,就会发生这种情况。在这种情况下,Go 可能应该等待套接字,直到它变得可连接,然后重试类似于它对Read/所做的事情Write,但它似乎没有这种逻辑。

所以你最好的办法是通过等待和重试Dial调用来处理错误。那,或者找出您的服务器不及时接受连接的原因。


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 338 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信