Próbuję zapewnić, że program usługi systemu Windows (działający na .NET) poprawnie zwalnia połączenia sieciowe.Połączenie TCP należące do pid zero
Podczas uruchamiania usługi lokalnie wiem, że utworzy on wiele połączeń HTTP z localhost na porcie 57300. Używam netstat
do monitorowania, czy są one poprawnie zwalniane.
Zaskoczyło mnie, że wiele połączeń do tego portu jest własnością "Systemowego stanu bezczynności" (PID = 0).
Tutaj widzimy, że tylko trzy z tych połączeń są własnością ich programu serwisowego (PID = 5012). Wszystkie inne są własnością PID 0.
Moje główne pytania to: Dlaczego tak się dzieje? i Czy muszę dbać?
Ale Chciałbym również wiedzieć:
Czy oznacza to, że program serwisowy nie zwolnić połączenie prawidłowo, czy też nie?
Czy takie połączenia zostaną ponownie wykorzystane w razie potrzeby?
Czy takie połączenie "zarezerwować gniazdo" w .NET ServicePointManager?
Rozumiem, że po zamknięciu połączenia TCP przechodzi ono w stan TIME_WAIT na określony czas.Ma to na celu zapewnienie, że wszelkie pakiety związane z połączeniem, które wciąż mogą być umieszczane w kolejce w sieci, nie będą kolidować z nowymi połączeniami. Ponieważ musi to nastąpić, nawet jeśli pierwotny proces został zakończony, domyślam się, że system Windows automatycznie przenosi własność na proces systemowy. Uważam więc, że odpowiedzi na cztery ostatnie pytania to: nie, tak, nie i nie. –
Dziękujemy! Dlaczego nie zamieścisz tego jako odpowiedzi? Czy wiesz, jak długo może być ten określony czas? –
możliwy duplikat [procesu 0 używa mojego portu] (http://stackoverflow.com/questions/17543298/process-0-is-using-my-port) – CodeCaster