2009-08-25 5 views
1

J'ai un problème où un socket TCP écoute sur un port, et a parfaitement fonctionné pendant très longtemps - il a manipulé plusieurs connexions, et semble fonctionner parfaitement. Cependant, de temps en temps lors de l'appel accept() pour créer une nouvelle connexion accept() appel échoue, et je reçois la chaîne d'erreur suivant du système:écoute socket meurt de façon inattendue

10022: An invalid argument was supplied.

Apparemment, cela peut se produire lorsque vous appelez accept() sur un socket qui n'écoute plus, mais je n'ai pas fermé le socket moi-même, et je n'ai pas été informé des erreurs sur ce socket.

Quelqu'un peut-il penser à des raisons pour lesquelles une prise d'écoute arrêterait d'écouter, ou comment l'erreur mentionnée ci-dessus pourrait être générée?

+2

Est-ce que vous vérifiez toutes vos valeurs de retour assez soigneusement pour être certain que vous n'avez pas été informé des erreurs sur cette prise? – kmarsh

Répondre

3

Quelques possibilités:

  • Une autre partie de votre code réenregistrés la valeur de la poignée. Vérifiez si cela a changé (gardez une copie ailleurs et comparez, imprimez-la, breakpoint sur l'écriture dans le débogueur, peu importe).

  • Quelque chose a fermé la poignée.

  • Interactions avec un LSP Winsock buggé.

1

Une chose qui me vient à l'esprit est le mode veille ou hibernation. Je ne sais pas comment ces événements sont gérés par la bibliothèque de winsock. Peut-être que l'interface réseau est (partiellement) arrêtée.

1

Il peut être judicieux de déboguer le thread du socket (soit avec un IDE, soit via un désassembleur) et de surveiller son exécution pour tout ce qui pourrait l'empêcher d'écouter.

Questions connexes