2014-04-02 13 views
13

Tôi đang cố gắng đảm bảo rằng chương trình dịch vụ Windows (chạy trên đầu trang .NET) đang phát hành đúng các kết nối mạng của nó.Kết nối TCP thuộc sở hữu của pid zero

Khi chạy dịch vụ cục bộ, tôi biết rằng nó sẽ tạo nhiều kết nối HTTP tới máy chủ cục bộ trên cổng 57300. Tôi đang sử dụng netstat để theo dõi xem chúng có được phát hành đúng cách hay không.

Tôi đã ngạc nhiên khi thấy rằng nhiều kết nối đến cổng này được sở hữu bởi "quá trình Nhàn rỗi hệ thống" (PID = 0).

netstat output

Ở đây chúng ta có thể thấy rằng chỉ có ba trong những kết nối được sở hữu bởi các chương trình dịch vụ (PID = 5012). Tất cả những người khác được sở hữu bởi PID 0.

câu hỏi chính của tôi là: Tại sao điều này xảy ra?Tôi có cần phải quan tâm không?

Nhưng tôi cũng muốn biết:

  • Điều này có nghĩa rằng chương trình dịch vụ đã phát hành kết nối đúng cách, hay không?

  • Các kết nối đó có được sử dụng lại nếu cần không?

  • Thực hiện kết nối như vậy "đặt trước vị trí" trong .NET ServicePointManager?

+1

Hiểu biết của tôi là sau khi kết nối TCP đóng, nó sẽ chuyển sang trạng thái TIME_WAIT trong một khoảng thời gian cố định.Điều này là để đảm bảo rằng bất kỳ gói nào liên quan đến kết nối có thể vẫn được xếp hàng đợi trong mạng sẽ không can thiệp vào các kết nối mới. Vì điều này đã xảy ra ngay cả khi quá trình gốc đã thoát, tôi đoán rằng Windows sẽ tự động chuyển quyền sở hữu cho quy trình hệ thống. Vì vậy, tôi tin rằng câu trả lời cho bốn câu hỏi cuối cùng của bạn là không, có, không, và không, tương ứng. –

+0

Cảm ơn bạn! Tại sao bạn không đăng câu trả lời đó? Ngoài ra, bạn có biết khoảng thời gian cố định có thể là bao lâu? –

+0

có thể trùng lặp của [quy trình 0 đang sử dụng cổng của tôi] (http://stackoverflow.com/questions/17543298/process-0-is-using-my-port) – CodeCaster

Trả lời

17

Sau khi kết nối TCP đóng, nó sẽ chuyển sang trạng thái TIME_WAIT trong một khoảng thời gian cố định. Điều này là để đảm bảo rằng bất kỳ gói nào liên quan đến kết nối có thể vẫn được xếp hàng đợi trong mạng sẽ không can thiệp vào các kết nối mới.

Vì đây có thể xảy ra ngay cả khi quá trình ban đầu đã thoát, tôi đoán rằng Windows sẽ tự động chuyển quyền sở hữu cho các quá trình của hệ thống.

Vì vậy, tôi tin rằng câu trả lời cho bốn câu hỏi cuối cùng của bạn là:

  • Không, có thể bạn không cần phải lo lắng về việc này.

  • Vâng, chương trình dịch vụ công bố các kết nối đúng cách.

  • Kết nối TIME_WAIT sẽ đóng cửa sớm if the system runs out of TCBs. Trong cấu hình mặc định, điều này sẽ xảy ra trước khi bạn hết cổng, do đó, có hiệu lực, có, các kết nối sẽ được sử dụng lại nếu cần.

  • Tôi không quen với trình quản lý điểm dịch vụ, nhưng không có lý do gì để nó theo dõi kết nối trong trạng thái TIME_WAIT, vì vậy có thể là không.

Trên Windows XP, default value for the TIME_WAIT delay was two minutes. Tôi không thể tìm thấy thêm thông tin gần đây, nhưng có vẻ như nó chưa được thay đổi kể từ đó.

Các vấn đề liên quan