用ACE_SOCK_Dgram来做udp接受出现的问题

monstersky 2008-01-24 10:16:26
写了段程序 ,大体结构是这样的
CSomeRecv : public ACE_Task<ACE_MT_SYNCH>
{
.........
ACE_INET_Addr server_addr;
ACE_SOCK_Dgram udp_reciever;
.........
}
在构造函数中用reactor(ACE_Reactor::instance());
然后有初始化函数如下
int CSomeRecv::init()
{
int retv = 0;
//unsigned short uPort = MyGetPrivateProfileInt( "INPUT", "PORT", 50009, GszPrivateProfile);
unsigned short uPort = 50009;
retv = server_addr.get_type();//[1]
retv = server_addr.set(uPort);//
retv = udp_reciever.open(server_addr);//[2]
if ( retv == -1)
{
return retv;
}
if (ACE_Reactor::instance ()->register_handler(this,ACE_Event_Handler::READ_MASK) == -1)
{
.......
}

m_timeout = 10;
m_bFlag = true;
return retv;

}


由于是udp接,不用设置IP,像winsock一样绑个端口应该就可以了,目前有这样几个问题
[1] 在上面注释有"[1]"字样的地方,ACE_INET_Addr::get_type()返回值为4096....这是啥东西??
[2] 同样的,标记"[2]"的地方,open返回的就是-1,ErrorLookup的结果是 "使用了与请求的协议不兼容的地址"
[3] 如果把注册reactor那段上面的相关东西去掉,reactor同样是无法注册... ...。
请帮我看看大概是什么问题,如何解决。
...全文
514 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
monstersky 2008-01-24
哦,这是初始化方式不同而已 ,都是一样的~~~,
这里我把addr做成成员变量了 ,开了reactor后其他地方也要用这个东西滴
另外开始的时候读配置初始化端口的接口,我就直接初始化 给addr了。

问题已经搞定了~~~~~
至于为什么,俺也不知道,代码也没改.....................
回复
dchilli 2008-01-24
ACE_INET_Addr local_addr(port_num, (ACE_UINT32)INADDR_ANY);
status = udp_from_server.open(local_addr);

试试这样.我用来收UDP是可以的啊.
回复
发动态
发帖子
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
社区公告
暂无公告