Chinaunix

标题: socket ioctl出错 [打印本页]

作者: xiangyu1986    时间: 2008-05-05 14:14
标题: socket ioctl出错
#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
不知道参数错在了哪里
请各位大侠帮忙解决一下啊
作者: xiangyu1986    时间: 2008-05-05 15:32
标题: 回复 #1 xiangyu1986 的帖子
我用的是FreeBSD 6.2啊
急死了
不知道为什么ioctl就是调不下去
作者: gvim    时间: 2008-05-05 15:43
设备不支持
作者: xiangyu1986    时间: 2008-05-05 16:29
标题: 回复 #3 gvim 的帖子
我现在找了一个可以用的ioctl号啊
但是出了个很怪异的事情
在FreeBSD里8139有两份驱动,if_re.c,if_rl.c
然后我在两份驱动里都设置了打印信息
我先在if_re.c中打出了一些平常的打印信息
但是在调用ioctl的时候却是在if_rl.c中打出了打印信息
难道一张网卡使用了两份驱动么?
作者: xiangyu1986    时间: 2008-05-05 16:36
标题: 回复 #3 gvim 的帖子
还有我先前问的那个问题
在8139驱动的ioctl中有SIOCSIFFLAGS这些系统调用
那为什么也调不下去
作者: gvim    时间: 2008-05-05 16:38
7。0里面只有if_re.c
作者: gvim    时间: 2008-05-05 16:39
原帖由 xiangyu1986 于 2008-5-5 16:36 发表
还有我先前问的那个问题
在8139驱动的ioctl中有SIOCSIFFLAGS这些系统调用
那为什么也调不下去


怎会?代码,错误?
作者: xiangyu1986    时间: 2008-05-05 16:51
标题: 回复 #6 gvim 的帖子

我现在用的是6.2
如果一张网卡用两份驱动就觉得有点神奇了
作者: xiangyu1986    时间: 2008-05-05 16:53
标题: 回复 #7 gvim 的帖子
最上面就是我的代码啊
我试着换了SIOCSIFFLAGS这些的都不行
后来看libpcap里用的SIOCGIFFLAGS
我试了一下就可以了
作者: gvim    时间: 2008-05-05 16:56
RTL8139不是re吗?你1楼代码里"bge0"是Broadcom的。
man 4 re
man 4 bge
作者: xiangyu1986    时间: 2008-05-05 16:57
标题: 回复 #7 gvim 的帖子
想请教一下版主
FreeBSD下有没有什么方法可以看设备与驱动模块的对应关系啊?
作者: xiangyu1986    时间: 2008-05-05 16:59
标题: 回复 #10 gvim 的帖子
我的系统里8139叫rl
我后来换成这个设备名了
也不行
作者: gvim    时间: 2008-05-05 16:59
原帖由 xiangyu1986 于 2008-5-5 16:57 发表
想请教一下版主
FreeBSD下有没有什么方法可以看设备与驱动模块的对应关系啊?


man 手册第4章
man 4
作者: gvim    时间: 2008-05-05 17:00
原帖由 xiangyu1986 于 2008-5-5 16:59 发表
我的系统里8139叫rl
我后来换成这个设备名了
也不行


看不到更多信息,不好判断。
作者: xiangyu1986    时间: 2008-05-05 17:03
标题: 回复 #14 gvim 的帖子

还是谢谢版主了啊
8139真麻烦啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2