2011-02-18 26 views
5

Socket.Disconnect(bool reuse) theo MSDN cho phép chương trình sử dụng lại ổ cắm. Câu hỏi của tôi là:Socket.Disconnect (bool reuse)

  1. Nếu chúng tôi quyết định sử dụng lại ổ cắm, điều đó có nghĩa là nó sẽ sử dụng lại cùng một điểm cuối cục bộ? Nó sẽ bảo vệ cổng cho ổ cắm đó hoặc nó sẽ chỉ (tôi không tin nó) lưu tất cả các nguồn tài nguyên đối tượng?

  2. Nếu có hiệu lực, nó chỉ tiết kiệm tài nguyên, chúng sẽ được cấp cho kết nối tiếp theo và nếu bộ đệm gửi/nhận tự động tuôn ra hoặc có cách nào xóa chúng? Socket.ShutDown(ShutDown.Both) có làm điều đó cho tôi khi ngắt kết nối không?

  3. Trong trường hợp nào tôi sẽ sử dụng Socket.Disconnect(false)? Nếu tất cả các mục đích là để tái sử dụng các ổ cắm những gì điều này sẽ cấp cho tôi?

+0

Tôi biết điều này không trả lời câu hỏi của bạn một cách rõ ràng, nhưng câu trả lời này cung cấp thêm chi tiết về các hành vi khác nhau giữa việc đóng ổ cắm .NET và tác động thực sự có trên ổ cắm cấp cửa sổ: http: // stackoverflow.com/questions/2014887/socket-close-doesnt-really-close-tcp-socket-c Tốt nhất có vẻ như bạn sẽ không được bảo đảm một điểm cuối khác, chỉ đơn giản bằng cách gọi Shutdown và Close trên đối tượng socket. – JNadal

Trả lời

5
  1. Nếu tái sử dụng = false socket sẽ được xử lý tự động sau khi đóng cửa. Tất cả các thiết lập như kích thước EndPoint và Buffer không được đặt lại về mặc định, nhưng bạn có thể thay đổi nó nếu bạn muốn. Giả sử người dùng quyết định thay đổi cổng kết nối. Bạn chỉ cần đóng ổ cắm, thay đổi cổng và kết nối lại ổ cắm mà không cần tạo ổ cắm mới và thiết lập lại.

  2. Socket.Shutdown chỉ vô hiệu hóa việc gửi/nhận/cả hai; không ngắt kết nối ổ cắm. Tuy nhiên điều này xảy ra cho dữ liệu đến/đi mới để bộ đệm sẽ được flushed normaly. Nó là một thực hành tốt để gọi nó trước khi ngắt kết nối để đảm bảo tất cả các dữ liệu đã được gửi và không có dữ liệu đang được nhận trong khi ngắt kết nối.

  3. Quay lại ví dụ về 1. Giả sử bạn chỉ cần thay đổi cổng. Bạn không muốn tạo lại socket, cấu hình tất cả các tham số của socket như các sự kiện và các bộ đệm một lần nữa, vv Nó tiêu tốn thời gian và tài nguyên, vì vậy tốt hơn là tái sử dụng socket mà bạn đã có.

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