我正在使用域套接字从另一个进程获取值,比如A从B获取值,它可以运行好几个月.但是最近,A在"发送"消息期间失败,并且偶尔会出现"errno 111,连接被拒绝".
我检查了B域套接字绑定文件,它存在.我也在另一台机器上做了一些测试,也运行良好.那么,之前有没有人遇到过这个问题?任何人都可以找到一些可能在这种情况下可能出错的线索吗?非常感谢.
当我在 unix 域套接字上看到此错误时,通常是因为进程 B 没有运行,或者连接路径不匹配。(如果B死了,它会自动重新启动吗?是否有可能故障是在B已死但尚未重新启动时发生的?)。另一种可能性:有没有可能A的多个副本同时运行?如果 B 的尚未接受的连接队列已满,您可能会收到 ECONNREFUSED 错误。
我建议在以下任一情况下运行进程 A 和 B strace:
strace -o A.log A
Run Code Online (Sandbox Code Playgroud)
或者,如果该进程已经在运行,
strace -o B.log -p <process-id-of-B>
Run Code Online (Sandbox Code Playgroud)
还,
netstat -na
Run Code Online (Sandbox Code Playgroud)
将为您提供系统中所有 UNIX 域套接字的状态。