以下电话:
ACE_HANDLE handles[2];
ACE_Pipe pipe;
if (pipe.open(handles)==-1)
T_OS_ELOG(ACE_OS::last_error());
有时会导致错误,ACE_OS :: last_error会返回以下字符串:
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.
我发现它令人困惑,因为错误字符串和所有相关的文档/答案都提到远程方/同行没有响应,但在我的情况下,我只是试图打开管道而不是真的有任何同行。
它不是防火墙相关的问题(没有防火墙,也没有任何东西在外面)我很确定它不是因为我用完了端口或类似的东西,因为在那种情况下我&#39 ;得到"Only one usage of each socket address (protocol/network address/port) is normally permitted"
。
那么什么可能导致这个错误?
(我在windows btw上运行)
答案 0 :(得分:2)
我不知道错误的根本原因是什么,但在Windows上,ACE_Pipe是使用环回TCP套接字实现的。这就是远程同伴/派对的概念如何进入图片。我建议使用调试器单步调试,看看哪些调用失败了。
答案 1 :(得分:0)
为将来的寻找者提供帮助:正如Steve Huston所提到的那样,ACE_Pipe是在Windows上使用TCP回送套接字实现的。
TCP环回在窗口的调度程序中的优先级很低,因此,如果系统中太忙,如果等待的高优先级任务太多,打开环回连接可能会随机超时。
一个可选的解决方案是使用快速路径套接字(https://blogs.technet.microsoft.com/wincat/2012/12/05/fast-tcp-loopback-performance-and-low-latency-with-windows-server-2012-tcp-loopback-fast-path/)或完全删除套接字并改为使用匿名管道(https://docs.microsoft.com/en-us/windows/desktop/ipc/anonymous-pipes)。
很遗憾,ACE不支持这两个选项,因此这需要实现自己的IPC,而不是使用ACE_Pipe。同样不是跨平台的。