Je suis en train d'écrire un client XMLRPC en C++ destiné à parler à un serveur XMLRPC python.Erreur d'utilisation du socket lors de la réutilisation des sockets
Malheureusement, à ce moment, le serveur XMLRPC python est que peut mettre en service une requête sur une connexion, il arrête, j'ai découvert cela grâce à la réponse de mhawke à ma précédente question au sujet d'un related subject
En raison de ceci, je dois créer une nouvelle connexion de socket à mon serveur de python chaque fois que je veux faire une demande de XMLRPC. Cela signifie la création et la suppression de beaucoup de sockets. Tout fonctionne bien, jusqu'à ce que j'approche ~ 4000 demandes. À ce stade, je reçois erreur de socket 10048, Socket in use.
J'ai essayé de dormir le thread pour laisser winsock corriger ses descripteurs de fichier, une astuce qui fonctionnait quand un de mes clients python avait un problème identique, en vain. J'ai essayé les suivantes
int err = setsockopt(s_,SOL_SOCKET,SO_REUSEADDR,(char*)TRUE,sizeof(BOOL));
sans succès.
J'utilise Winsock 2.0, WSADATA :: iMaxSockets ne devrait pas entrer en jeu, et de toute façon, j'ai vérifié et son ensemble à 0 (je suppose que cela signifie l'infini)
4000 demandes ne pas ressemble à un nombre exagéré de demandes à faire au cours d'une application. Est-il possible d'utiliser SO_KEEPALIVE côté client pendant que le serveur se ferme et rouvre?
Ai-je complètement oublié quelque chose?
oui, après chaque requête, j'appelle closesocket(). J'ai vérifié, et ceci arrive même la dernière demande avant que l'erreur se produise, ainsi la douille n'est pas laissée ouverte – DanJ