Si vous ne pouvez pas prédire le type exact d'environnement que votre application va exécuter, ne vous en souciez pas. Choisissez n'importe quel nombre supérieur à 1024 et rendez-le également configurable afin que l'utilisateur puisse le modifier en cas de conflit avec un autre service/application.
Bien sûr, vous pouvez toujours éviter les ports très courants comme 8080 (HTTP alternatif) ou 3128 (proxies comme squid), 1666 (perforce), etc. Vous pouvez consulter une liste complète des ports connus ici, ou jeter un œil à /etc/services .
Si vous ne vous souciez pas du numéro de port et que cela ne vous dérange pas qu'il change à chaque fois que votre programme est exécuté, ne liez simplement pas le port avant de l'écouter (ou liez-le avec le port 0, si vous voulez lier une adresse IP spécifique). Dans les deux cas, vous dites au système d'exploitation de choisir un port libre pour vous.
Après avoir commencé à écouter, utilisez getsockname
pour savoir quel port a été sélectionné. Vous pouvez l'écrire dans un fichier, l'afficher à l'écran, en faire hériter un enfant via fork
, etc.
Pour une application statique, pensez à cocher /etc/services
pour trouver un port qui n'entrera pas en collision avec tout ce que vous utilisez et qui n'est pas couramment utilisé ailleurs.
$ tail /etc/services
nimspooler 48001/udp # Nimbus Spooler
nimhub 48002/tcp # Nimbus Hub
nimhub 48002/udp # Nimbus Hub
nimgtw 48003/tcp # Nimbus Gateway
nimgtw 48003/udp # Nimbus Gateway
com-bardac-dw 48556/tcp # com-bardac-dw
com-bardac-dw 48556/udp # com-bardac-dw
iqobject 48619/tcp # iqobject
iqobject 48619/udp # iqobject