|
Bas de page | |
---|---|
Auteur | Sujet : [C] Problème de sockets |
Publicité | Posté le 18-01-2006 à 14:54:55 |
francky06l | En effet depuis le XP / SP2 windows a mis des limitations au niveau du nombre de connections. En fait il y a surtout une limite au nombre de connections possible dans un temps donne. Je crois que passe cette limite, on se retrouve avec une socket error 10048 (a verifier).
|
_p1c0_ | J'ai bien ajouté la clé TcpTimedWaitDelay mais sans grand succès... Le nombre de TIME_WAIT dans netstat reste important mais il a diminué. Par contre, j'ai toujours ces plantages réguliers.
Message édité par _p1c0_ le 18-01-2006 à 16:49:25 |
francky06l | Je pense que le probleme viens du nombre de socket sous windows en general. Est ce que tu recupere le code d'erreur dans le cas de plantage ??
|
Taz bisounours-codeur | fais bien attention de bien refermer tes sockets clients au niveau du serveur. Si tu peux les fermer proprement au niveau du client, c'est aussi bien.
|
_p1c0_ |
|
francky06l | Le connect fait un bind implicitement de toute facon ... Enfin sur XP/SP2, j'ai retrouve la source de la limitation :
|
Taz bisounours-codeur | unlink c'est pour les fichiers. fais bien tes close, fais bien attention de bien closer meme en cas d'erreur. ce que tu peux faire par exemple, c'est faire un strace -f et tracer les descripteurs de fichiers, voir si tu n'en perds pas.
|
francky06l | Oui il doit faire le nettoyage mais sur windows il attend le fameux TcpTimedWait delay pour nettoyer les connections en TIME_WAIT. Le truc plus economique aussi c'est de faire un half-close cote client, c'est a dire de faire un shutdown(SO_SND) apres avoir envoye les donnees (si c'est possible, suivant le scenario). La socket peut encore recevoir mais elle ne peut plus envoyer. Les socket seront en FIN_WAIT et plus en TIME_WAIT.
|
_p1c0_ |
|
Publicité | Posté le 18-01-2006 à 17:44:40 |
_p1c0_ |
|
francky06l | Tu peux creer un client multithread, si le code est light to lui colles 256 threads, ca te permettrait avec 4 ordis de tester deja pas mal de connections simultanees. Il est vrai que meme en multithread, ca va quand meme se mettre en queue au niveau bas TCP mais ca donne une idee quand meme.
|
_p1c0_ |
|
_p1c0_ | Bien, j'ai laissé tourner 300 clients toute la nuit.A mon arrivée ce matin, il n'y en a plus que 39 qui tournent et ce sont mes clients linux... Tous les clients windows sont tombés (aussi bien sur XP que sur 2000 Server). Le serveur semble toujours faire son boulot puisque les 39 clients linux sont toujours là.
|
francky06l | Pour connaitre l'erreur socket sous windows, il faut utiliser GetLastError() ou WSAGetLastError(), les sockets error ne sont pas gerees avec errno. Tu peux trouver les codes d'erreur ( code > 10000) dans winsock.h ou winsock2.h
|
_p1c0_ | Ok, donc je viens de remplacer mon errnor par GetLastError() qui me retourne 10060 qui correspond à un TimeOut. Maintenant, j'ai du mal à comprendre que cela se produit quasiment qu'avec les postes windows. Là sous linux j'en ai lancé 200 qui se connectent toutes les 2 secondes (au lieu de 5) et ils tombent beaucoup moins que les clients windows. Le TimeOut n'est pas le même sous windows et sous linux?
Message édité par _p1c0_ le 19-01-2006 à 10:30:39 |
Taz bisounours-codeur |
ce n'est pas une spécifité windows
|
francky06l |
|
_p1c0_ | Ok, ce genre de structure semble pas mal, mais est ce que je peux être sur que ca va résoudre mon problème?
|
francky06l | Ce genre de technique est utilise sur IIS (web Win32) et quelques autres web. Quelques autres font aussi du fork ..etc ...
|
Taz bisounours-codeur |
_p1c0_ | Donc si je fais comme ça, les accept se feront plus vite. Le traitement des requêtes n'ira pas plus vite c'et sûr mais moi je veux éviter les TimeOut au niveau du client. Je pense que je vais coder ça. Enfin mon code est en C donc avec une queue de la STL ca va pas faire beau tout ça!
|
francky06l |
|
_p1c0_ | Bonjour à tous,
|
ylav0 | Bonjour _p1c0_,
|
Publicité | Posté le |
Sujets relatifs | |
---|---|
Probleme de switch | Problème d'accès temps réel |
problème datagrid et index des columns | SQL : Gros problème de lenteur sur un UPDATE |
[CSS] Problème de largeur ! | Problème de post avec easyphp -> 405 post not allowed |
Problème SQL sous ACCESS | Problème avec return ... il ne revoie rien quand je le met dans un if |
vba excel: problème de compatibilité sur différents postes de travail | Problème pour un quiz |
Plus de sujets relatifs à : [C] Problème de sockets |