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

Développement Discussion :

Quantité de données sur une socket


Sujet :

Développement

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 56
    Points : 38
    Points
    38
    Par défaut Quantité de données sur une socket
    Bonjour à tous,

    Une nouvelle fois, j'ai besoin de votre savoir infini pour me venir en aide .

    Je suis en train de redévelopper un mini serveur http intégré. Jusque là tout va bien. Mais j'ai un soucis au niveau de mes sockets lors des très grosses requêtes (> 40000 octets).
    Je m'explique :

    Avant de faire un recv, je lis la taille de ce que je vais recevoir comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ioctl(m_socket, FIONREAD, &toread)
    Tout va bien pour les petites trames, par contre, pour les grosses, je récupère une taille bien souvent plus petite que ce qui arrive réellement. Certainement parce que tout n'est pas encore arrivé dans les buffers réseaux quand je lit le contenu de la socket.
    Ça me pose un énorme problème, car, à cause de cela, ça me tronque la fin de mes trames... Donc, je voudrais savoir si il y'a une astuce pour savoir si j'ai TOUT recu (où savoir la taille réel de la trame).

    Snark.

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    l'ioctl FIONREAD te renvois le nombre de bytes lisible immédiatement.

    tu peux controler la taille de tes buffers de réception via:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      int    sockbufsize = 0;
      int    size = sizeof(int);
      err = getsockopt(skt, SOL_SOCKET, SO_RCVBUF, (char *)&sockbufsize, &size);

    il me semble que quand ces buffers sont pleins (avant d'être plein en général), il est déclenché un mécanisme anti-congestion (à vérifier).

    je ne suis pas très partisan de l'utilisation de l'ioctl FIONREAD (fin, sous windows ça peux se comprendre)

    au niveau applicatif, tu ne dois pas lire des "trames", tu reçois des messages.
    dans le cadre d'un serveur http, je te conseille te t'appuyer sur le protocole (taille passé explicitement (dans le cas de keepalive) ou fin aprés 2 \n)
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  3. #3
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    C'est ce qu'on ma dis aussi en me renseignant ailleurs, apparement, on ne peut jamais connaite la taille exacte dans commencer a interpreter le message.
    Pourtant, je pensais que le protocole IP était capable de transmettre la taille du message..

  4. #4
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    il ne faut pas tout confondre
    "IP" ne travaille pas au même niveau que http.

    sur le modéle modéle TCP/IP:
    IP est dans la couche 2 (couche internet)
    alors qu'http est dans la couche 4 (couche application)

    la seule chose qu'IP peux connaitre, c'est la taille du datagramme.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

Discussions similaires

  1. Une grande quantité de données sur Oracle 8i?
    Par bliml dans le forum Oracle
    Réponses: 13
    Dernier message: 01/03/2007, 11h45
  2. Excel : consolidation de données sur une seule feuille
    Par aquamusic dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2006, 18h32
  3. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22
  4. [visual c++] connaitre le debit sur une socket
    Par khayyam90 dans le forum MFC
    Réponses: 4
    Dernier message: 25/10/2005, 16h12
  5. [PHP-JS] Envoi de données sur une même page...
    Par dudux dans le forum Langage
    Réponses: 8
    Dernier message: 14/09/2005, 13h51

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