IPCのポートでTCP/IPサービスを実行したいとします。とにかく通信したいプロセスにポート番号を渡すので、ポート番号は重要ではありません。システムからまだ利用可能なランダムで高い(通常は> 49152)ポート番号を取得するための最良の方法は何ですか?POSIXに使用できるものはありますか?
FTPサーバーがこれを頻繁に必要とすることを私は知っています。
エフェメラル ポートはそれを行うことができます。OS によって、空きポート プールからポートが割り当てられます。
ここでこれを行う、BSDライセンスのCコードがいくつかあります
('', 0)
Python では、同じ目的で socket.AF_INET アドレス ペアを指定できます。sock.bind(('', 0))
ポート番号 0 にバインドしようとすると、システムはソケットを「一時的な」ランダム ポートにバインドします。getsockname
その後、 (C) でポートを取得できます。
ルビーで:
s = TCPServer.new('localhost', 0) #You can also use nil instead of 0
s.addr[1] #The obtained port number
唯一の方法は、目的のポート範囲をループして、成功するポートが見つかるまで、一度に1つずつ各ポートにソケットをバインドしようとすることです。