Accueil > Forum > > > > Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox
Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox
lundi 25 juillet 2005 à 21:26:04 |
Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

billbaxter
|
Bonjour, J'ai développé une appli client-serveur avec les winsock2 en me référant aux exemples MSDN, donc à priori dans les règles de l'art. Le client pose une question ("send"). Le serveur en attente ("recv") reçoit, traite la question et renvoie ("send") sa réponse de dimension variable. Le client qui s'était mis en attente ("recv") reçoit sa réponse et l'intègre, etc... Je suis tombé par hasard sur la cas particulier suivant : lorsqu'au gré des questions-réponses le serveur retourne une réponse d'EXACTEMENT 1418 octets, càd que le send a pour paramètre une taille à envoyer de 1418 octets, le recv() du client reste bloqué. Pour tout envoi de dimension différente (inf ou sup) ça marche. Mon buffer est bien (sur)dimensionné. Pas de débordement.
Du côté client, pour varier le morcellement, j'ai essayé de modifier la taille mentionnée dans le recv(), en petit (1024), en moyen (4096), et en grand... Rien n'y fait. J'ai essayé en bloquant, non bloquant. J'ai utilisé ioctlsocket avec SO_LINGER pour m'assurer que le flush était correct. C'est vraiment cette dimension qui a l'air de poser pb. Ca me fait penser à cette erreur algorithmique classique de découpage d'un bloc de dimension N qui est un multiple entier de blocs élémentaires n, et où il faut bien penser au "+1" : nbblocs = N / n ; si (N mod n != 0) alors nbblocs += 1 Est-ce que 1418 ne correspondrait pas à une dimension particulière (liée à la Freebox par exemple) ? Précisons que je rencontre ce pb entre 2 freebox, je n'ai pas essayé dans un autre contexte matériel (routeur, FAI différents).
Merci pour votre aide.
|
|
mardi 26 juillet 2005 à 00:00:47 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

cosmobob
|
salut, il faut que tu postes ton code ici si tu veux être aidé. je coupe court a tes questions philosophiques sur la taille du buffer; il y a 99% de chance que ton pb vienne d'un bogue (les 1% restant étant un pb de configuration de ton reseau). oublie le nombre 1418 ... qu'aurais tu pensé si ca avait été 666 ? copie colle le code du client et du serveur !! a+
|
|
mardi 26 juillet 2005 à 00:15:51 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

cosmobob
|
poste un code que d'autres personnes puisse compiler, pour voir si ton pb est reproductible ...
|
|
mardi 26 juillet 2005 à 16:26:38 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

billbaxter
|
ok, mon code est déposé. 2 projets visual studio : le serveur TstSockS et le client TstSockC. Dérivé d'un projet existant pour mettre en évidence mon problème. @+ En attendant je vais essayer avec d'autres config matérielles.
|
|
mardi 26 juillet 2005 à 21:26:48 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

billbaxter
|
Pour info,
1) j'ai bien cru lire quelque part que 1418 est la longueur des buffers internes de TCP/IP gérée par les routeurs... Ce ne serait donc pas une valeur comme une autre.
2) j'ai fait un test entre chez moi (avec "tstsockc") et le serveur (avec "tstsocks") - cf mon code source déposé -, les 2 en freebox dernière version, et ça marche. Je n'ai donc détecté ce problème qu'entre ma machine du boulot et le serveur en question. Je testerai demain entre ma machine du boulot et un autre serveur, mais à priori ça plantera aussi car c'est sur cet autre serveur que j'avais détecté initialement le problème. Ce qui reviendrait à dire qu'il y a un problème depuis ma freebox "boulot" (pb de routage ?...).
A confirmer.
|
|
mercredi 27 juillet 2005 à 10:23:56 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

cosmobob
|
mais quand ca marche pas quel est ton problème ????? le send te renvoie SOCKET_ERROR ?!? ou tout se passe correctement mais rien n'arrive?
|
|
mercredi 27 juillet 2005 à 10:27:00 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

cosmobob
|
ps: ton code est cela dit mal structuré et surtout super mal indenté, ce qui le rend difficilement lisible !!
|
|
mercredi 27 juillet 2005 à 14:26:41 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

billbaxter
|
Quand ça ne marche pas le problème est le suivant : le send du serveur se fait correctement mais le recv du client reste bloqué jusqu'à retourner un WSAECONNRESET. J'ai mis à jour le code avec une indentation correcte sur les CPP. Ceci dit, je ne vois pas en quoi il est mal structuré, une fois cette correction faite (remplacement des tabulations par 2 espaces)... Sinon, A CE JOUR, mon problème ne se produit (systématiquement et de façon reproductible) que depuis mon poste de développement à mon boulot (freebox V1 connectée en USB) vers deux serveurs particuliers dotés d'une freebox dernière génération. Depuis mon poste, mis à part ce problème tout le reste marche nickel (Internet, applications réseau, etc...) A+ 
|
|
mercredi 27 juillet 2005 à 15:34:05 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

cosmobob
|
salut, essaie de virer ton globalLock, dans ton exemple ta série de questions se fait dans le meme thread.
|
|
mercredi 27 juillet 2005 à 16:51:02 |
Re : Blocage socket recv() lorsque send() a envoyé 1418 octets - entre 2 freebox

billbaxter
|
Je pourrais effectivement optimiser le code en faisant dans le client : 1) cBytesRead = recv (ServerSock, lpBufCour, 8192 - dimLus, 0) ; 2) n'appeler qu'une fois le WSAStartup 3) Locker et Unlocker en dehors de la boucle Question (i) Mais bon, le noeud du pb n'est pas là me semble-t'il. A+
|
|
Cette discussion est classée dans : send, dimension, client, octets, recv
Répondre à ce message
Sujets en rapport avec ce message
Fonctions send et recv [ par bubbless ]
Bonjour, Dans le cadre d'un projet, je réalise actuellement un système serveur / client, et je me trouve confronté à un probème : le serveur acc
Probleme Architecture client Serveur Multithread [ par kawito ]
Bonjour,j'ai fais un client serveur TCP qui doit gerer n connexions(win32 c++) winsowk1.1.le serveur gere les connexions a travers un thread acceptqui
caractères indesirables avec recv(); [ par DJeS ]
voici la partie de mon code problematique :char buf[5]; int g=recv(csock,buf,5,0);coutcoutje recois bien 5 octets de données selon mon int g(autant
sockets send() recv() [ par dletozeun ]
bonjour,j'essais de faire communiquer 2 progs avec les sockets et send() et recv() est il possible d'envoyer autre chose qu'une chaine avec la fonctio
2 send, 1 seul recv [ par chriskang ]
J'ai créé une application de type client-serveur qui réagit bizarrement lorsque je fais plusieurs send consécutifs vers une même socket.Au cours de me
send et recv [ par StayCrunchy ]
Bonsoir, J'ai un petit soucis avec les fonctions send et recv. j'ai fait un petit programme qui permet d'envoyer un fichier d'un serveur à un client.
send et recv dans le meme programme [ par obader ]
Salut a tous J'ai fait un petit programme client qui se connecte à un seveur téléphonique, mon programme contient un snd suivi d'un recv, le snd march
savoie si le Client est déconnecté [ par amoweb ]
Salutje suis entrain de faire un serveur HTTP avec GCC ( sous windows).Le problème c'est que si le client se déconnecte pendant que j'envoie un fichie
Problème client/serveur -> flux du recv avec un air d'extraterrestre [ par thispawn ]
Bonjour j'ai codé un système client serveur. Dès que le client arrive a se connecter il envoi avec 3 send ceci : format B ou D | taille du buffer | bu
Socket [ par c2millet ]
Bonjour à tous,je voudrais dans un premier tps si qqun a ou connais une doc sur les sockets. Ensuite, g un petit pb. g réalisé un serveur qui lit sur
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|