route: SIOCADDRT: File exists 问题

     在设置linux 的ip是采用了c方式,反复设置同一个ip时系统会抛出以下信息,真令人费解!
 route: SIOCADDRT: File exists
以下为C修改IP地址的代码:
int set_ipaddr(UI32_T ipaddr)
{
    int s;

    if((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
       return -1;
    }
    struct ifreq ifr;
    bzero((char *)&ifr, sizeof(ifr));
    strcpy(ifr.ifr_name,ETH_NAME);
    struct sockaddr_in addr;
    bzero(&addr, sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
    //inet_aton(ipaddr,&addr.sin_addr);//将输入字符转成网络地址
    //inet_ntoa(ipaddr,&addr.sin_addr);//将输入字符转成网络地址
    addr.sin_addr.s_addr=ipaddr;

    memcpy((char*)&ifr.ifr_ifru.ifru_addr, (char*)&addr, sizeof(struct sockaddr_in));
    if(ioctl(s, SIOCSIFADDR, &ifr) < 0)
    {
       close(s);
       return -1;
    }
    close(s);
    return 0;

}
于是乎跟踪一下这个信息是哪里输出的,在内核代码找到了些线索,file->f_op->unlocked_ioctl
file->f_op->unlocked_ioctl=sock_ioctl
进一步上看sock_ioctl会调用sock_do_ioctl函数,改函数会返回一个err值,因此在这些函数的地方加上打印语句,看看结果,以下是打印出来的信息,可见使用上面c代码设置同一个ip地址后会出现 -17再输出 route: SIOCADDRT: File exists 信息
sock_do_ioctl 0
sock_ioctl
 0 
sock_do_ioctl -17
sock_ioctl
 -17 
sock_do_ioctl 0
sock_ioctl
 0 
route: SIOCADDRT: File exists
sock_do_ioctl 0
sock_ioctl
 0 

跟踪到这里还没有找到数据此信息的源头,通过目录下的error.c文件我找到了该信息的字符串,改字符串存在了hash表中,以便后续输出使用。改值EEXIST 为 17,似乎和-17有一定的关系
今天就找到了这些线索,。但是我通过ifconfig命令来反复设定通一个ip地址为啥没有抛出那条信息呢?难道是C代码有问题?革命尚未成功啊,明天继续...




<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(2126) | 评论(1) | 转发(1) |
0

上一篇:巧用backtrace系列函数

下一篇:一个超级宏

给主人留下些什么吧!~~

hereShirley2014-04-03 12:27:11

请问这个问题您后来解决了吗

评论热议
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值