ARM-linux4.3.2,无法用PF_PACKET类型打开套接字

时间:2010-07-21 07:13:55

标签: c linux sockets arm cross-compiling

我正在使用带有linux 2.6.29的FriendlyARM并使用ARM-Linux GCC进行编译 4.3.2

当尝试使用PF_PACKET打开套接字时,它失败并显示错误97,地址 家庭不受协议支持。

这是一个说明问题的示例程序 -

 #include <stdio.h>
 #include <sys/socket.h>
 #include <netpacket/packet.h>
 #include <net/ethernet.h> 
 //#include <linux/if_packet.h>
 //#include <linux/if_ether.h>
 #include <errno.h>

  int main() {
      int sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETHER_TYPE));
      if (sockfd < 0)
          perror("Can't open socket");
  }

为什么会发生这种情况?

提前致谢

奥伦

编辑: 我尝试过的事情 -

  1. 确保我以root身份运行

  2. 在linux 2.6.27.7-9-pae和intel机器下编译,工作正常(gcc 4.4.1)

  3. 以下帖子表明它与linux版本有关,但基于上述内容,我认为它可能是其他内容。 link text

2 个答案:

答案 0 :(得分:2)

你的内核配置中是否定义了CONFIG_PACKET?这是AF_PACKET所必需的。

答案 1 :(得分:0)

如果没有链接层,可以尝试使用PF_INET:

    if((isock = socket(PF_INET, SOCK_RAW, htons(ETH_P_IP))) == -1){
        perror("socket():");
    }

再次使用此内核处理链接层。

或者使用SOCK_DGRAM:

if((rsock = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) == -1){
        perror("socket():");
    }