2009-02-17 8 views
4

J'ai un service responsable de la lecture et de l'écriture depuis un serveur. La lecture et l'écriture se font dans différents fils.Pourquoi ai-je cette exception SocketException dans mon service C#?

L'unité d'exécution du lecteur est active tout le temps tandis que l'unité d'écriture active uniquement pour envoyer un message et meurt une fois que le message est écrit sur le serveur et que la réponse est reçue.

Le service fonctionne pendant 4 jours et après que j'obtiens cette erreur en permanence, à chaque fois que le service essaie de lire à partir du port:

System.Net.Sockets.SocketException: Une opération sur un socket pourrait pas être effectuée parce que le système manquait espace tampon suffisant ou parce qu'une file d'attente était pleine

+0

merci pour le montage, je cherchais éditer mais pas en mesure de trouver une option. – user65266

Répondre

6

Cela peut se produire lorsque vous établissez un grand nombre de connexions sortantes très rapidement et à court de ports locaux. Vous pouvez lire sur la "plage de port éphémère" here.

Ou, vous pouvez manquer de douilles. Assurez-vous de les close après leur utilisation.

+0

J'ai un socket que je lis à chaque fois, et il y a un mécanisme keepalive implémenté (envoi de message keepalive au serveur et réponse de traitement) si la connexion est perdue socket est fermé et nouveau socket est ouvert – user65266

+0

Je me suis rendu compte que je n'appelais pas socket seulement l'arrêt. espérons que cela va résoudre le problème. – user65266

0

Je vous suggère fortement de regarder votre fil d'écriture, et comment vous faites référence aux ressources liées au socket. Par exemple, appelez-vous Close/Dispose pour n'importe quel NetworkStream ou d'autres objets que vous utilisez avec le Socket? Un exemple de code du thread d'écriture serait utile si vous êtes toujours aux prises avec le problème.

Vous pouvez également surveiller la mémoire de processus et gérer l'utilisation via le gestionnaire de tâches.

Questions connexes