2009-02-23 19 views
13

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?

+2

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? –

Trả lời

20

Đố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)

+2

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

+0

'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

5

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

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