免费注册 查看新帖 |

Chinaunix

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

socket ioctl出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-05 14:14 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>
       
void die(char *why, int n)  
{  
  perror(why);  
  exit(n);  
}  


int main(void)
{
        struct sockaddr_in *addr;
       
        int sockfd;
        struct ifreq        ifr;
        int i=0;
       
        sockfd=socket(AF_INET,SOCK_DGRAM,0);
        if(sockfd==-1)
                printf("socket fail\n");
       
        memset(&ifr, 0, sizeof(ifr));
        strncpy(ifr.ifr_name, "bge0",strlen("bge0")+1 );
       

        i=ioctl(sockfd,SIOCGPRIVATE_0,&ifr);
        if(i<0)       
           die("ioctl",1);

        close(sockfd);

        return 0;
}


一个简单的socket ioctl的程序,调用时总是出错,perror的结果是ioctl: Invalid argument
不知道参数错在了哪里
请各位大侠帮忙解决一下啊

论坛徽章:
0
2 [报告]
发表于 2008-05-05 15:32 |只看该作者

回复 #1 xiangyu1986 的帖子

我用的是FreeBSD 6.2啊
急死了
不知道为什么ioctl就是调不下去

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
3 [报告]
发表于 2008-05-05 15:43 |只看该作者
设备不支持

论坛徽章:
0
4 [报告]
发表于 2008-05-05 16:29 |只看该作者

回复 #3 gvim 的帖子

我现在找了一个可以用的ioctl号啊
但是出了个很怪异的事情
在FreeBSD里8139有两份驱动,if_re.c,if_rl.c
然后我在两份驱动里都设置了打印信息
我先在if_re.c中打出了一些平常的打印信息
但是在调用ioctl的时候却是在if_rl.c中打出了打印信息
难道一张网卡使用了两份驱动么?

论坛徽章:
0
5 [报告]
发表于 2008-05-05 16:36 |只看该作者

回复 #3 gvim 的帖子

还有我先前问的那个问题
在8139驱动的ioctl中有SIOCSIFFLAGS这些系统调用
那为什么也调不下去

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
6 [报告]
发表于 2008-05-05 16:38 |只看该作者
7。0里面只有if_re.c

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
7 [报告]
发表于 2008-05-05 16:39 |只看该作者
原帖由 xiangyu1986 于 2008-5-5 16:36 发表
还有我先前问的那个问题
在8139驱动的ioctl中有SIOCSIFFLAGS这些系统调用
那为什么也调不下去


怎会?代码,错误?

论坛徽章:
0
8 [报告]
发表于 2008-05-05 16:51 |只看该作者

回复 #6 gvim 的帖子


我现在用的是6.2
如果一张网卡用两份驱动就觉得有点神奇了

论坛徽章:
0
9 [报告]
发表于 2008-05-05 16:53 |只看该作者

回复 #7 gvim 的帖子

最上面就是我的代码啊
我试着换了SIOCSIFFLAGS这些的都不行
后来看libpcap里用的SIOCGIFFLAGS
我试了一下就可以了

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
10 [报告]
发表于 2008-05-05 16:56 |只看该作者
RTL8139不是re吗?你1楼代码里"bge0"是Broadcom的。
man 4 re
man 4 bge
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP