求教一个Acceptorr实例open不成功的问题
又有问题要求教各位ACE同胞了~~这两天看到了...\ACE\ACE_wrappers\examples\Connection\misc里面的Connection_Misc_Test_Upipe工程,运行这个工程,显示的是init: handle is not a socket。进入工程后单步调试,发现执行Acceptorr实例的open语句:this->open (local_addr, this->reactor_, 0, 0, &this->thr_strategy_) 时会返回-1,说明open不成功嘛。再进入这个open函数,发现是其中的一个名为enable的函数出了问题,总是返回-1~~觉得很是奇怪,不知道这个官方提供的demo是哪里出了问题,或是我的什么设置出了问题,会导致Acceptorr实例open不成功,求各位指点一二,谢谢啦~~端口被占用么?查看一下。 本帖最后由 yunh 于 2014-2-26 18:06 编辑
大概看了一下,Connection_Misc_Test_UPipe 这个工程我在 ACE 5.4.1 版本中编译运行也发现相同的问题,acceptor 在 open 时返回错误。这个工程是一个测试工程,测试目标是 ACE_UPIPE_Acceptor、ACE_UPIPE_Connector 及 ACE_UPIPE_Stream。
与其它 IPC 类型不同,ACE_SPIPE_Acceptor、ACE_SPIPE_Connector 与 ACE_SPIPE_Stream 是基于管道的,在 Windows 平台上是命名管道(Windows Named Pipe),在 Unix 平台上则是普通的文件管道。而 UPIPE 本身借用了 SPIPE 的功能(本身存在派生关系),用来建立连接,一旦连接建立,UPIPE 是通过 ACE 的 Streams 框架来通信,简单的说就是消息队列,所以不具有跨进程的能力,更不用说跨机器。而不论是哪种 PIPE,它们使用的句柄是Windows 事件或文件句柄,不可与 socket 句柄一视同仁,例如 select 对这些句柄是无效的。
这个测试失败的原因就是:通用的处理 socket 的流程,在处理这些句柄时返回了错误,导致 open 失败。这也是 ACE 大量使用模板带来的一个负作用:用户可以任意的组合它们,而完全不管最终的代码是干什么的!
Acceptor-Connector 框架要使用 Reactor 进行处理器的注册,这对于非 socket 句柄来说是不行的,因此最终结论是:ACE_SPIPE_XXX 与 ACE_UPIPE_XXX 不能用于 Acceptor-Connector 框架,上面的测试工程本身就是无效的。
页:
[1]