ACE 管道有时打开 return 错误 10060 - "A connection attempt failed because the connected party did not properly respond"
ACE pipe open sometimes return error 10060 - "A connection attempt failed because the connected party did not properly respond"
以下调用:
ACE_HANDLE handles[2];
ACE_Pipe pipe;
if (pipe.open(handles)==-1)
T_OS_ELOG(ACE_OS::last_error());
有时会导致错误,ACE_OS::last_errorreturn如下字符串:
Error code: 10060. Error details: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
我觉得很困惑,因为错误字符串和所有相关的文档/答案都提到了远程方/对等方没有响应,但在我的情况下,我只是想打开一个管道,但实际上并没有任何同行。
这不是与防火墙相关的问题(没有防火墙,也没有任何东西出门)而且我很确定这不是因为我 运行 没有端口或类似的东西,因为在那种情况下我是得到 "Only one usage of each socket address (protocol/network address/port) is normally permitted"
。
那么是什么导致了这个错误?
(我 运行 在 windows 顺便说一句)
我不知道错误的根本原因是什么,但在 Windows 上,ACE_Pipe 是使用环回 TCP 套接字实现的。这就是远程 peer/party 的概念如何进入画面。我建议使用调试器单步执行它,看看哪个调用失败了。
为未来的求职者回答自己:正如史蒂夫休斯顿提到的,ACE_Pipe 是在 windows 上使用 TCP 环回套接字实现的。
TCP 环回在 window 的调度程序中的优先级非常低,因此当系统太忙时,如果有太多更高优先级的任务在等待,打开环回连接可能会随机超时。
一个可选的解决方案是使用快速路径套接字 (https://blogs.technet.microsoft.com/wincat/2012/12/05/fast-tcp-loopback-performance-and-low-latency-with-windows-server-2012-tcp-loopback-fast-path/) or dropping sockets completely and using anonymous pipes instead (https://docs.microsoft.com/en-us/windows/desktop/ipc/anonymous-pipes)。
不幸的是,ACE 不支持这两个选项,因此这将需要实现您自己的 IPC 而不是使用 ACE_Pipe。而且它不是跨平台的。
以下调用:
ACE_HANDLE handles[2];
ACE_Pipe pipe;
if (pipe.open(handles)==-1)
T_OS_ELOG(ACE_OS::last_error());
有时会导致错误,ACE_OS::last_errorreturn如下字符串:
Error code: 10060. Error details: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
我觉得很困惑,因为错误字符串和所有相关的文档/答案都提到了远程方/对等方没有响应,但在我的情况下,我只是想打开一个管道,但实际上并没有任何同行。
这不是与防火墙相关的问题(没有防火墙,也没有任何东西出门)而且我很确定这不是因为我 运行 没有端口或类似的东西,因为在那种情况下我是得到 "Only one usage of each socket address (protocol/network address/port) is normally permitted"
。
那么是什么导致了这个错误?
(我 运行 在 windows 顺便说一句)
我不知道错误的根本原因是什么,但在 Windows 上,ACE_Pipe 是使用环回 TCP 套接字实现的。这就是远程 peer/party 的概念如何进入画面。我建议使用调试器单步执行它,看看哪个调用失败了。
为未来的求职者回答自己:正如史蒂夫休斯顿提到的,ACE_Pipe 是在 windows 上使用 TCP 环回套接字实现的。
TCP 环回在 window 的调度程序中的优先级非常低,因此当系统太忙时,如果有太多更高优先级的任务在等待,打开环回连接可能会随机超时。
一个可选的解决方案是使用快速路径套接字 (https://blogs.technet.microsoft.com/wincat/2012/12/05/fast-tcp-loopback-performance-and-low-latency-with-windows-server-2012-tcp-loopback-fast-path/) or dropping sockets completely and using anonymous pipes instead (https://docs.microsoft.com/en-us/windows/desktop/ipc/anonymous-pipes)。
不幸的是,ACE 不支持这两个选项,因此这将需要实现您自己的 IPC 而不是使用 ACE_Pipe。而且它不是跨平台的。