Tôi đã sử dụng SO_REUSEADDR
để máy chủ của tôi bị chấm dứt khởi động lại khi không đồng ý rằng ổ cắm đã được sử dụng. Tôi đã tự hỏi nếu có sử dụng khác của SO_REUSEADDR
? Có ai sử dụng tùy chọn ổ cắm cho mục đích khác không?Sử dụng SO_REUSEADDR?
Trả lời
Đối với TCP: mục đích chính là khởi động lại quy trình đóng/bị giết trên cùng một địa chỉ.
Cờ là cần thiết vì cổng chuyển sang trạng thái TIME_WAIT để đảm bảo tất cả dữ liệu được truyền.
Nếu hai socket được kết nối với cùng một cổng và cổng và là thành viên của cùng một nhóm phát đa hướng, dữ liệu sẽ được gửi đến cả hai ổ cắm.
Tôi đoán việc sử dụng thay thế sẽ là một cuộc tấn công bảo mật để cố gắng chặn dữ liệu.
(Source)
Đối với UDP: SO_REUSEADDR được sử dụng cho multicast
Hơn một quá trình có thể liên kết với cùng cổng SOCK_DGRAM UDP nếu bind() là trước bởi:
int one = 1; setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, & một, sizeof (một))
Trong trường hợp này, mỗi multicast đến hoặc phát sóng datagram UDP mệnh cảng chia sẻ được gửi đến tất cả ổ cắm bị ràng buộc vào cổng .
(Source)
Yêu cầu làm rõ. Cổng nghe không đi vào TIME_WAIT nhưng có thể kết nối được chấp nhận. TIME_WAIT không có ở đó để đảm bảo tất cả dữ liệu được truyền, nó ở đó để tránh nhầm lẫn với kết nối tiếp theo giữa các điểm kết thúc giống nhau. – EJP
'Liên kết' có xảy ra ở phía người gửi HOẶC bên nhận (đối với UDP: SO_REUSEADDR) không? Điều gì sẽ xảy ra nếu người gửi và người nhận là các nút riêng biệt trên mạng? – Sammy
Việc sử dụng chính khác là cho phép nhiều ổ cắm để bind()
vào cổng tương tự trên UDP. Bạn có thể không nghĩ rằng nó sẽ xuất hiện, nhưng đôi khi nhiều ứng dụng có thể muốn nghe trên các địa chỉ broadcast/multicast với một số cổng nhất định. Nó cũng cho phép một liên kết với địa chỉ ký tự đại diện, trong khi cũng liên kết với một địa chỉ cụ thể. Ví dụ: Apache có thể liên kết với *: 80 và 10.11.12.13:80
- 1. nhận các gói UDP gửi tới 127.0.0.1 khi sử dụng SO_REUSEADDR
- 2. Sử dụng SO_REUSEADDR - Điều gì sẽ xảy ra với ổ cắm mở trước đó?
- 3. Tại sao không sử dụng SO_REUSEADDR trên các máy chủ Unix TCP/IP?
- 4. Netty + JMeter, lỗi khi tái sử dụng kết nối
- 5. Sử dụng thời gian sử dụng jQuery
- 6. sử dụng muối khi sử dụng SimpleMembershipProvider
- 7. Cách sử dụng EF (khung pháp nhân) sử dụng câu lệnh "sử dụng"
- 8. MySQL không sử dụng chỉ mục ("Sử dụng filesort") khi sử dụng ORDER BY
- 9. Cách sử dụng 'sử dụng' hoặc 'sử dụng' bằng ngôn ngữ lập trình
- 10. Sử dụng Ngày Sử dụng Sqlalchemy trong Bộ lọc Sử dụng Postgresql
- 11. Sử dụng dịch vụ web bằng cách sử dụng Javascript
- 12. Sử dụng libtool mà không cần sử dụng liên kết
- 13. Android: Cách sử dụng "sử dụng thư viện"?
- 14. Để sử dụng OpenID hay không sử dụng?
- 15. cách sử dụng không sử dụng phiên tạo
- 16. Luôn sử dụng; không bao giờ sử dụng địa phương?
- 17. sử dụng từ khóa "đang sử dụng" trong C#
- 18. SQL Server NẾU KHÔNG SỬ DỤNG SỬ DỤNG?
- 19. Khi nào sử dụng, không sử dụng, OneToOne và ManyToOne
- 20. Sử dụng câu lệnh "sử dụng" để xử lý
- 21. Cách sử dụng mạng của quy trình sử dụng Powershell
- 22. Không thể sử dụng một EntityTransaction khi sử dụng JTA
- 23. sử dụng đúng cách "Sử dụng" tuyên bố cho DataContext
- 24. Sử dụng kênh trực tiếp so với sử dụng Proxy?
- 25. Bắt thoát khỏi "Sử dụng tạm thời; Sử dụng filesort"
- 26. Nhấp vào liên kết sử dụng selen sử dụng python
- 27. Sử dụng tên cột khi sử dụng SqlDataReader.IsDBNull
- 28. Tái sử dụng jsessionId trên XMLHttpRequest ajax sử dụng jquery
- 29. trên không để sử dụng "sử dụng" tờ khai?
- 30. Về việc sử dụng sử dụng ManualResetEvent C#?
Cảm ơn, tôi đã tự hỏi chính xác điều tương tự. Câu hỏi liên quan: tại sao SO_REUSEADDR không phải là mặc định? –