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

 C++ Discussion :

problem avec les buffer: taille max


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 5
    Points : 7
    Points
    7
    Par défaut problem avec les buffer: taille max
    Ce si est un bou de code de mon programme "lss":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    	long pduLen;	
    	int maxPduLength
    	//maxPduLength_ if it is set to 0 this mean thatno control is done in the PDU size
    	//if the value is 0 , the maxPduLength will not be taken into account
    	//pduLen is the real PDU length
     
    	SSC_DebugTrace <<"maxPduLength_ is set to "<< maxPduLength_ << endl;
    	if(maxPduLength_ != 0) 
    	{
        	if (pduLen > maxPduLength_)
                pduLen = maxPduLength_; 
    	}	    
           SSC_DebugTrace <<"PduLen is set to "<< pduLen << endl;
     
           char* buf = new char[pduLen + 1l];
           result = receiveSocketData(buf, (int) pduLen);
    Ce programme Marche a merveille ( sur plusieurs machine LINUX, SUN, HP).
    a l'exception d'une machine "HP-UX ipb228 B.11.23 U ia64 1545032245" c'est une HP Itamium.
    dans ma console j'ai le message suivant:

    End of LSS initialisation.
    aCC runtime: Uncaught exception of type "bad_alloc".
    [HP ARIES32]: Error occured while writing core file for 32 bit
    [HP ARIES32]: PA-RISC application /alu/1350OMS9.1/NMC/SEC/7.2.1/lss/bin/lss (got signal 6).
    [HP ARIES32]: Core file may not be correct.
    dans les fichiers de traces j'ai le message suivant:
    -->SLAC_Sock::fdOk
    <--SLAC_Sock::fdOk
    maxPduLength_ is set to 0
    PduLen is set to 1195986768
    EndLSS by signal 6.
    je ne sais pas exactement la cause du crach du programme (lss).
    Mais je pense que ce problème est due au dépassement de la taille max que je peu alloue a un buffer dans cette machine.
    c'est possible aussi que la PDU soit corrompu ou bien sans le caractère NULL (\0) en fin de PDU.

    Est ce qu'il a quelqu'un qui peut me dire si le problème provient de l'un des causes que j'ai évoque.
    Est ce qu'il a quelqu'un qui peu me donne une façon en c++ comment je peu prévenir c'est deux problème (taille max du buffer sur une machine, PDU corrompu).

    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour et bienvenu,
    J'imagine que le bout de code est partiel et que pduLen est bien initialisé avant d'être utilisé!
    Revenons sur ton problème:
    1/Echec de l'allocation car taille trop importante: c'est possible. Pour gérer les échec d'allocations, le mieux est que tu traites les exceptions levées dans le bout de code où tu fais cette allocation.
    2/Mémoire corrompue: si tu sous entend que ton programme a débordé sur un buffer quelque part, je ne suis pas sûr que cela puisse être détecté automatiquement. Il faudrait encapsuler tes buffers dans une classe qui pourrait vérifier si le buffer a été altéré ou si l'écriture a débordé (en encadrant le buffer de marqueur, en adjoignant un checksum sur le buffer et avec des interfaces type Lock/Release pour obtenir l'@ et la relâcher).
    3/ Allouer un buffer de plus de 1 Go pour une réception sur une socket: voilà quelque chose d'assez ambitieux. As-tu déjà réussi à transférer une telle quantité de donnée sur un seul packet UDP? Je pense que tu as une incohérence sur cette donnée. Sinon, à mon avis, il faut revoir ton protocole d'échange.
    Voilà.
    Bon courage.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    3/ Allouer un buffer de plus de 1 Go pour une réception sur une socket: voilà quelque chose d'assez ambitieux. As-tu déjà réussi à transférer une telle quantité de donnée sur un seul packet UDP? Je pense que tu as une incohérence sur cette donnée. Sinon, à mon avis, il faut revoir ton protocole d'échange.
    Pour compléter la réponse de 3DArchi, trouvé dans le RFC 768
    La longueur d'un datagramme UDP est codée sur 2 octets. Cette longueur comprend aussi la taille du header UDP (4 octets). La longueur des données d'un paquet UDP ne peut donc dépasser 65535 - 4 = 65531 octets.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Probleme avec les tags et mon buffer =(
    Par SiOuZ dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 12/01/2009, 10h05
  2. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  3. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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