我正在使用带有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");
}
为什么会发生这种情况?
提前致谢
奥伦
编辑: 我尝试过的事情 -
确保我以root身份运行
在linux 2.6.27.7-9-pae和intel机器下编译,工作正常(gcc 4.4.1)
以下帖子表明它与linux版本有关,但基于上述内容,我认为它可能是其他内容。 link text
答案 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():");
}