huang_jin_min 发表于 2009-8-27 21:01:59

ACE_HANDLE 怎么变成 ACE_SOCK_Stream

知道一个ACE_SOCK_Stream的值,就可以得到ACE_HANDLE ,那如果知道ACE_HANDLE ,怎么转化成一个ACE_SOCK_Stream的值,ACE里面有没有这样转换的宏。

winston 发表于 2009-8-28 10:39:30

ACE_SOCK_Stream (ACE_HANDLE h)
Constructor (sets the underlying ACE_HANDLE with h).

huang_jin_min 发表于 2009-8-31 10:38:21

那假设一个ACE_HANDLE 为 h
现在
ACE_SOCK_Streamstream1(h);
ACE_SOCK_Stream stream2(h);
ACE_SOCK_Stream stream3(h);
然后
stream1.send()
stream2.send()
stream3.send()

这三个发送的时候使用的是同一个连接吗?

modern 发表于 2009-8-31 10:53:02

是的,不过楼主为什么要这么用呢?
看不出来有什么好处。

huang_jin_min 发表于 2009-8-31 14:35:19

reactor和ACE_Event_Handler一起使用的时候,可以读取数据时会回调成员函数hande_input(ACE_HANDLE h),
这里的参数是ACE_HANDLE 类型的,要找出对应的ACE_SOCK_Stream 才能读取数据,如果有N个ACE_SOCK_Stream 的话,要找出这里的ACE_HANDLE h对应的ACE_SOCK_Stream ,普通的办法要花线性的时间去做判断,而一个ACE_HANDLE 应该唯一对应一个ACE_SOCK_Stream,我想应该有办法不用花线性查找的时间就可以找出这个ACE_SOCK_Stream
先谢谢楼上的,我要先试试

modern 发表于 2009-8-31 16:18:55

建议楼主看一下ACE_Connector与ACE_Acceptor模型,
应该可以很好解决楼主遇到的问题.
由ACE_Connector建立的连接使用ACE_Svc_handler继承自ACE_Event_Handler
ACE_SOCK_Stream是ACE_Svc_handler的成员变量
因此hande_input之后,只要this->peer().recv()即可。
不存在楼主所谓的使用Handle进行线性查找的问题。
页: [1]
查看完整版本: ACE_HANDLE 怎么变成 ACE_SOCK_Stream