Select bloquand en ecriture

Signaler
Messages postés
14
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
16 juin 2009
-
Messages postés
14
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
16 juin 2009
-
Bonjour,
Je travaille sur un projet reseau ou le server ne doit pas bloquer meme s'il envois des donnees a un client qui enfin de compte ne les lis jamais. (C'est un peu idiot mains bon c'est le sujet).
J'utilise select(2) pour monitorer des sockets en lecture et en ecriture. Pour la lecture pas de probleme ca marche impec. Pour l'ecriture, si le client ne lie pas les donnees qu'on lui envois, select me dis que je peu ecrire dessus alors que ca bloque.
Comment bien utilser select pour l'ecriture sur une socket ?
Je travaille sous NetBSD.

<!-- / message -->



JV

2 réponses

Messages postés
71
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
14 septembre 2007

Je ne connait pas la condition utilisée par select pour dire si on peut écrire sur un socket ou pas mais le problème que tu décris ressemble à ce scénario (ce ne sont que des suppositions, à vérifier bien entendu !)

(Utilisation de tcp supposée)
Ton serveur envoit des données (que le client ne lit pas) et au fur et à mesure, tu remplis la fenêtre de réception du client. A partir d'une certaine limite (64K ou moins envoyé), l'implémentation TCP du client renverra une taille de window de 0. A ce moment, TCP sur le serveur refusera d'envoyer des données additionelles (qui serait perdue) et ton write sera bloquant.

Je ne vois pas vraiement comment résoudre ce problème si le client ne lit jamais les données. Tu peux toujours agrandir la fenetre de réception du client mais ca ne fait que repousser le problème plus loin.

Tu pourrais nous donner des détails supplémentaires sur ce que tu essayes de faire et pourquoi le client ne lit jamais les données. Ca permettra peut-être de t'aider d'avantages.

Belo
Messages postés
14
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
16 juin 2009

C'est bien le protocole TCP que j'utise.
Le probléme viendrai du fait que j'utilse mal la fonction send.
je ferai un essais puis je vous tiens au courrant.

JV