IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

probleme de "General Protection Fault" lors de la copie d'adresse IPV6 apres cast d'une struct sockeaddr


Sujet :

Réseau C

  1. #1
    Membre averti
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut probleme de "General Protection Fault" lors de la copie d'adresse IPV6 apres cast d'une struct sockeaddr
    je dev une fonction de copie de sockaddr de type ipv / ipv6

    le probleme se situe su la partie ipv6 :
    Pour eviter de faire une copie par memcpy ou 4 affectation sucessif du champ struct in6_addr sin6_addr de la structure sockaddr_in6
    j'ai creer une uinon de structure supportant des variables 32/64/128 bit definit tel quel :
    Nom : Screenshot From 2026-08-22 13-36-12.png
Affichages : 162
Taille : 3,9 Ko
    Nom : Screenshot From 2026-08-22 13-35-38.png
Affichages : 149
Taille : 9,3 Ko
    Nom : Screenshot From 2026-08-22 13-34-35.png
Affichages : 161
Taille : 30,2 Ko

    cela fonctionne pour la partie 32bits mais pas pour la 64 /128
    Nom : Screenshot From 2026-08-22 13-40-31.png
Affichages : 159
Taille : 26,5 Ko

    le debug donne ceci :
    Nom : Screenshot From 2026-08-22 13-39-00.png
Affichages : 159
Taille : 34,9 Ko
    Nom : Screenshot From 2026-08-22 13-37-59.png
Affichages : 154
Taille : 18,9 Ko
    Nom : Screenshot From 2026-08-22 13-38-35.png
Affichages : 162
Taille : 35,9 Ko

    les variables sont bien initialisee mais le systeme d'exploitation renvoie une fault procttion sur une zone memoire partagee au sein de l'union lorsque de l'affection de 128 ou 64bit alors que ma fonction de comparaison en 128bit fonctionne ..

    y a til une solution possible pour affecter directement l'adresse sans passer par la copie de 4 32 bit ou a defaut de se taper l'affection du tableau de l'adresse em memcpy ?

  2. #2
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    774
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 96
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 774
    Par défaut
    Salut,

    Il existe déjà la structure générique sockaddr_storage qui peut contenir n'importe quelle famille de sockaddr.
    conf. https://www.man7.org/linux/man-pages...ddr.3type.html
    Pour info, c'est valable aussi pour Windows.

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 664
    Par défaut
    Salut à tous.

    Je me demande s'il n'y aurait pas un problème d'alignement ?

  4. #4
    Membre averti
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2010
    Messages : 63
    Par défaut
    je me suis également posé la question mais les données de src proviennent d'un maillon d'une liste chaîne que retourne la fonction getifaddrs() , le champ ifa_addr de type sockaddr * : un tableau.
    j'ai teste les flAG __attribut__ (aligned ())) , cela provoque le meme resultat.

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 664
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 664
    Par défaut
    attention si vous recevez des données par les sockets oui qu'elles soient bien alignées et si elles sont bien little endian big endian comme c'est décrit ici

    Sous Mac ou Linux c'est peut-être l'inverse.
    Vérifier tout de même

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 999
    Par défaut
    Hello

    __in32_s et __in64_s possèdent l'attribut __attribute__((packed)), mais votre structure __in128_s en a pas, je suis de l'avis d'Artemus concernant le problème d'alignement.

    Vous avez mentionné vouloir éviter "de se taper l'affectation du tableau de l'adresse en memcpy", mais il y a une idée reçue à ce sujet. En langage C moderne, memcpy ne va pas exécuter une boucle lente et copier le tableau octet par octet.
    Si vous écrivez memcpy(&adst, &asrc, 16), le compilateur reconnaît la taille fixe de 16 octets. Il va optimiser cette fonction (intrinsic) et la remplacer par une seule instruction assembleur non alignée !

    C'est la méthode la plus rapide, la plus standard, et la seule qui respecte parfaitement la norme C sans risquer de GPF.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/05/2012, 09h00
  2. [CKEditor] probleme d'image; ajout de quot lors d'insertion d'image
    Par dedel53 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 28/10/2007, 00h05
  3. [JS] Problème de quotes pour enregistrer un formulaire.
    Par polnioumane dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/10/2005, 17h04
  4. Problème de quotes sous PostGre
    Par Philhz dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/07/2004, 13h03
  5. Problème de quote
    Par kennini dans le forum ASP
    Réponses: 4
    Dernier message: 20/11/2003, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo