Reutilizando un número de puerto en un UDP

En ASIO, ¿es posible crear otro socket que tenga el mismo puerto de origen que otro socket?

Mi aplicación de servidor UDP está llamando a reciben_desde el puerto 3000. Transmite el paquete a un subproceso de trabajo que enviará la respuesta (actualmente usando un puerto de origen dinámico).

El socket en el otro hilo se crea así:

udp::socket sock2(io_service, udp::endpoint(udp::v4(), 0));

Y responde a la solicitud original usando el sender_endpoint guardado con el paquete original.

Lo que me gustaría poder hacer es responder al cliente utilizando el mismo puerto de origen que el servidor está escuchando. Pero no puedo ver cómo se puede hacer eso. Recibo una excepción si trato de decir esa dirección en uso. ¿Es posible hacer lo que te pido? La razón por la que quiero eso es que si uso puertos dinámicos, significa que los clientes deben agregar reglas de firewall especiales en Windows para permitir que se lean los paquetes de respuesta. Descubrí que si el puerto de origen es el mismo en la respuesta, el firewall de Windows le permitirá volver a ingresar.