Mit boost :: asio gibt es eine portable Möglichkeit, die freie Portnummer herauszufinden

8

Ich versuche gerade herauszufinden, wie man die Nummer eines freien Ports findet, um eine Verbindung aufzubauen, idealerweise mit boost :: asio. Diese Portnummer würde dann verwendet werden, um zu hören (und nur dann kann ich einen Socket öffnen).

Grob gesagt, gibt es einen Weg zu tun

%Vor%

wobei der Port leer bleibt (Einstellung auf 0 funktioniert nicht)

Keine der zuvor gesehenen Optionen war portabel oder effizient.

    
user1018513 05.12.2012, 23:36
quelle

1 Antwort

9

Der beste Weg, dies zu umgehen, besteht darin, das Betriebssystem in dem Moment, in dem der Socket an einen Port gebunden ist, einen zufällig verfügbaren Port auszuwählen. Weisen Sie den Socket an, an den Port 0 zu binden, und fragen Sie dann den Socket nach dem tatsächlichen Port ab, an den er gebunden ist, falls er erfolgreich ist. Versuchen Sie nicht, im Voraus einen Hafen zu finden und dann an ihn zu binden, der eine Wettlaufbedingung einführt. Ein anderer Socket könnte den Port abfangen, nachdem Sie ihn gefunden haben, aber bevor Sie ihn binden konnten.

    
Remy Lebeau 06.12.2012, 01:43
quelle

Tags und Links