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

monstersky monstersky 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
写了段程序 ,大体结构是这样的
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同样是无法注册... ...。
请帮我看看大概是什么问题,如何解决。
...全文
评论 2
收藏 已收藏
分享
返回顶部