Wiederverwenden einer Portnummer in einem UDP

Ist es in ASIO möglich, einen anderen Socket zu erstellen, der denselben Quellport wie ein anderer Socket hat?

Meine UDP-Serveranwendung ruft "receive_from" über Port 3000 auf. Sie leitet das Paket an einen Arbeitsthread weiter, der die Antwort sendet (derzeit wird ein dynamischer Quellport verwendet).

Der Socket im anderen Thread wird folgendermaßen erstellt:

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

Und antwortet auf die ursprüngliche Anforderung unter Verwendung des mit dem ursprünglichen Paket gespeicherten sender_endpoint.

Ich möchte in der Lage sein, dem Client über denselben Quellport zu antworten, auf dem der Server empfangsbereit ist. Aber ich kann nicht sehen, wie das gemacht werden kann. Ich erhalte eine Ausnahme, wenn ich versuche, die verwendete Adresse zu verwenden. Kann ich tun, was ich verlange? Wenn ich dynamische Ports verwende, bedeutet dies, dass die Clients spezielle Firewallregeln in Windows hinzufügen müssen, damit die Antwortpakete gelesen werden können. Ich habe festgestellt, dass die Windows-Firewall die Rückübertragung zulässt, wenn der Quellport in der Antwort identisch ist.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage