ARM-linux4.3.2, не может открыть сокет с типом PF_PACKET - PullRequest
1 голос
/ 21 июля 2010

Я использую FriendlyARM с linux 2.6.29 и компилирую с ARM-Linux GCC 4.3.2

При попытке открыть сокет с помощью PF_PACKET происходит сбой с помощью errno 97, Address семья не поддерживается протоколом.

Это пример программы, которая иллюстрирует проблему -

 #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");
  }

Есть идеи, почему это происходит?

Заранее спасибо

Oren

редактировать: Вещи, которые я пробовал -

  1. Убедитесь, что я работаю с правами root

  2. Компиляция под Linux 2.6.27.7-9-pae и машина intel, под которой он работает нормально (gcc 4.4.1)

  3. Пост ниже предполагает, что это как-то связано с версией для Linux, но, исходя из вышеизложенного, я думаю, что это может быть что-то еще. текст ссылки

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

У вас есть CONFIG_PACKET, определенный в вашей конфигурации ядра?Это необходимо для AF_PACKET.

0 голосов
/ 22 июля 2010

Если вы можете обойтись без слоя ссылки, вы можете попробовать с PF_INET:

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

Опять же с этим ядро ​​обрабатывает слой Link.

Или с SOCK_DGRAM:

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