He usado SO_REUSEADDR
para tener mi servidor que se terminó para reiniciar sin quejarse de que el socket ya está en uso. Me preguntaba si hay otros usos de SO_REUSEADDR
? ¿Alguien ha usado la opción de socket para otro propósito que no sea dicho?Usos de SO_REUSEADDR?
Respuesta
Para TCP: el objetivo principal es reiniciar un proceso cerrado/inactivado en la misma dirección.
El indicador es necesario porque el puerto entra en un estado TIME_WAIT para garantizar que se transfieren todos los datos.
Si dos sockets están vinculados a la misma interfaz y puerto y son miembros del mismo grupo de multidifusión, los datos se entregarán a ambos sockets.
Supongo que un uso alternativo sería un ataque de seguridad para tratar de interceptar datos.
(Source)
Para UDP: SO_REUSEADDR se utiliza para multidifusión
Más de un proceso se puede unir al mismo puerto SOCK_DGRAM UDP si el bind() es precedido por:
int one = 1; setsockopt (calcetín, SOL_SOCKET, SO_REUSEADDR, & uno, sizeof (un))
En este caso, cada multidifusión entrante o datagramas UDP de difusión destinada a el puerto compartido se entrega a todos los sockets al puerto .
(Source)
Se requiere aclaración. Un puerto de escucha no entra en TIME_WAIT, pero las conexiones aceptadas sí pueden. TIME_WAIT no está allí para garantizar que se transfieren todos los datos, sino para evitar confusiones con una conexión posterior entre los mismos puntos finales. – EJP
¿Está sucediendo el "enlace" en el lado del remitente O en el lado del receptor (para UDP: SO_REUSEADDR)? ¿Qué sucede si el emisor y el receptor son nodos separados en la red? – Sammy
El otro uso principal es permitir enchufes múltiples bind()
al mismo puerto de UDP. Es posible que no piense que podría aparecer, pero a veces es posible que varias aplicaciones deseen escuchar en direcciones de difusión/multidifusión con un número de puerto determinado. También permite que uno se una a la dirección del comodín, mientras que también se vincula a una dirección específica. Por ejemplo, Apache podría vincularse a *: 80 y 10.11.12.13:80
- 1. Usos legítimos de ReferenceEquals()
- 2. usos legítimos de (\ +) // 1
- 3. Usos prácticos de TypedReference
- 4. Usos de ThreadLocal
- 5. Usando SO_REUSEADDR - ¿Qué sucede con el socket abierto anteriormente?
- 6. ¿Por qué no usar SO_REUSEADDR en servidores Unix TCP/IP?
- 7. Usos de resurrección de objetos
- 8. Usos de Ruby on Rails
- 9. Usos de 'para' en Java
- 10. Usos prácticos de MethodRental Class?
- 11. Usos de KeyedByTypeCollection en .Net?
- 12. Usos creativos de las flechas
- 13. Usos de Erlang en Telecom
- 14. Otros usos de referencias débiles?
- 15. Usos de volátiles sin sincronización
- 16. OpenSocial y sus usos
- 17. jQuery .each() - ¿Usos prácticos?
- 18. usos para MapAll (// @)
- 19. usos legítimos del constructor Función
- 20. CacheItem regionName propiedad responsabilidad/usos?
- 21. C# Atributos y sus usos
- 22. ¿Usos prácticos para tipos estructurales?
- 23. Usos para MachineKey en ASP.NET
- 24. Buenos usos del método finalize()
- 25. ¿Usos comunes para los indicadores?
- 26. ¿Usos para clases genéricas estáticas?
- 27. ¿Usos de la función de Ackermann?
- 28. Rendimiento de rendimiento dentro de los usos
- 29. ¿Usos prácticos de serialización de objetos?
- 30. Usos de las listas de referenciación auto
Gracias, me preguntaba exactamente lo mismo. Pregunta relacionada: ¿por qué SO_REUSEADDR no es el predeterminado? –