免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2723 | 回复: 0
打印 上一主题 下一主题

怎样用程序设置网关!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-20 16:40 |只看该作者 |倒序浏览
有人知道用IOCTL SIOCADDRT 来设置网关出现错误
Address family not supported by protocol是什么原因.系统里的route命令都能设置的啊,,,
设置IP和子网都对的
ioctl (fd, SIOCSIFADDR, &ifr)
ioctl (fd, SIOCSIFNETMASK, &ifr)

我设置网关代码如下:
int SetIPGw(const char *ifname, const char *gw)
{
        struct sockaddr_in sin;
        struct protoent *pro;
        struct rtentry rm;
        int fd;

        int ret;
        char *ptr;
        short found_colon = 0;
       
        //bzero (&ifr, sizeof (struct ifreq));
        bzero (&rm, sizeof (struct rtentry));
        if (ifname == NULL || gw == NULL)
                return -1;

        pro = getprotobyname("tcp");
       
        fd = socket (AF_INET, SOCK_STREAM, pro->p_proto);
        if (fd  == -1)
        {
                perror ("Cann't create network socket connection\n");
                return -1;
        }
       
        memset(&sin,   0,   sizeof(sin));   
               sin.sin_family   =   AF_INET;   
               sin.sin_addr.s_addr   =   inet_addr(gw);   
               memcpy(&rm.rt_gateway,   &sin,   sizeof(sin));

        if (ioctl (fd, SIOCADDRT, &rm) < 0)
        {
                perror ("Gw Not setup interface\n");
                return -1;
        }

        rm.rt_flags   =   RTF_UP | RTF_GATEWAY;;
        if   (ioctl(fd,   SIOCSIFFLAGS,   &rm)   <   0)     
              {   
            perror("SIOCSIFFLAGS");   
                   return   -1;   
              }
               close (fd);

              return   0;     
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP