您的位置:首页 > 理论基础 > 计算机网络

通过IP获得ACE_SOCK_Dgram_Mcast需要的net_if网络设备名

2008-06-20 16:08 471 查看
在用到ACE_SOCK_Dgram_Mcast时如果要绑定网卡设备,而需要在join时提供设备名称,而我的程序设计是设置IP的,所以需要通过IP得到设备名。后来多方查询资料,做了如下函数:

string get_bind_nic(string ipaddr)

{

ACE_SOCK_Dgram so(ACE_INET_Addr((u_short)0));

ifreq if_buf[16];

ifconf ifc;

int nic_count;

ifc.ifc_len = sizeof(if_buf);

ifc.ifc_buf = (caddr_t)if_buf;

if(ACE_OS::ioctl(so.get_handle(), SIOCGIFCONF, (char*)&ifc) == 0)

{

nic_count = ifc.ifc_len / sizeof(struct ifreq);

while(nic_count-- > 0)

{

if(ACE_OS::ioctl(so.get_handle(), SIOCGIFADDR, (char*)&if_buf[nic_count]) == 0)

{

if(ipaddr == ACE_OS::inet_ntoa(((struct sockaddr_in*)(&if_buf[nic_count].ifr_addr))->sin_addr))

return if_buf[nic_count].ifr_name;

}

}

}

return "";

}


需要注意的是,这个函数只支持第一个匹配的设备名的……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: