9

IPCのポートでTCP/IPサービスを実行したいとします。とにかく通信したいプロセスにポート番号を渡すので、ポート番号は重要ではありません。システムからまだ利用可能なランダムで高い(通常は> 49152)ポート番号を取得するための最良の方法は何ですか?POSIXに使用できるものはありますか?

FTPサーバーがこれを頻繁に必要とすることを私は知っています。

4

5 に答える 5

14

ポート番号を指定しない場合、OSは自動的にエフェメラルポート番号を選択します。

ポート番号の選択から:

新しいサーバーソフトウェアは、特定のポート番号に依存しないように努める必要があります。特に、既知のポートに不可避的に関連付けられていないユーザーレベルのソフトウェアの場合はそうです。幸い、これは、一時的なポート番号を選択するようにシステムに指示するポート0を要求することで簡単に実行できます。

于 2009-06-04T01:20:42.787 に答える
6

エフェメラル ポートはそれを行うことができます。OS によって、空きポート プールからポートが割り当てられます。

ここでこれを行う、BSDライセンスのCコードがいくつかあります

('', 0)Python では、同じ目的で socket.AF_INET アドレス ペアを指定できます。sock.bind(('', 0))

于 2009-06-04T01:40:02.247 に答える
2

ポート番号 0 にバインドしようとすると、システムはソケットを「一時的な」ランダム ポートにバインドします。getsocknameその後、 (C) でポートを取得できます。

ルビーで:

s = TCPServer.new('localhost', 0) #You can also use nil instead of 0
s.addr[1] #The obtained port number
于 2015-05-08T09:10:31.410 に答える
-9

唯一の方法は、目的のポート範囲をループして、成功するポートが見つかるまで、一度に1つずつ各ポートにソケットをバインドしようとすることです。

于 2009-06-04T01:18:26.287 に答える