Connexion TCP détenue par pid zero

j'essaie de m'assurer qu'un programme de service Windows (tournant sur .NET) libère correctement ses connexions réseau.

lors de l'exécution du service localement je sais qu'il va créer beaucoup de connexions HTTP à localhost sur le port 57300. J'utilise netstat pour vérifier s'ils sont libérés correctement.

j'ai été surpris de voir que de nombreuses connexions à ce port appartiennent au" système Idle process " (PID=0).

netstat output

ici, nous pouvons voir que seulement trois de ces connexions sont détenues par le programme de service (PID=5012). Tous les autres sont détenus par le PID 0.

mes principales questions sont: pourquoi cela se produit-il? et ai-je besoin de soins?

mais j'aimerais aussi savoir:

  • est-ce que cela signifie que le service le programme n'a libérer la connexion correctement, ou pas?

  • ces raccordements seront-ils réutilisés si nécessaire?

  • Faire lien "réserver une place" dans le .NET ServicePointManager ?

15
demandé sur Mårten Wikström 2014-04-02 10:07:48

1 réponses

après la fermeture d'une connexion TCP, elle passe dans L'état TIME_WAIT pour une période fixe. Ceci est pour s'assurer que tous les paquets liés à la connexion qui pourraient encore être mis en file d'attente dans le réseau n'interféreront pas avec les nouvelles connexions.

puisque cela doit se produire même si le processus original a quitté, je devine que Windows transfère automatiquement la propriété sur le processus système.

donc, je crois les réponses à vos quatre derniers les questions sont:

  • Non, vous n'avez probablement pas besoin de vous inquiéter à ce sujet.

  • Oui, le programme de service a libéré la connexion correctement.

  • les connexions TIME_WAIT seront fermées tôt si le système est à court de TCBs . Dans la configuration par défaut, cela se produira avant que vous n'épuisiez les ports, donc en fait, oui, le les connexions seront réutilisées si elles sont nécessaires.

  • Je ne connais pas le gestionnaire du point de service, mais il n'y a aucune raison pour qu'il suive les connexions dans L'état TIME_WAIT, donc probablement non.

sur Windows XP, la valeur par défaut pour le délai TIME_WAIT était de deux minutes . Je ne peux pas trouver d'information plus récente, mais il semble probable qu'elle n'ait pas été modifiée depuis.

18
répondu Harry Johnston 2014-04-02 20:36:12