4

私は前学期にコンピューターネットワーキングを取り、自分のプロジェクトのために Linux で (gcc を使用して) C プログラミングを行いました。私が何度も遭遇した非常に面倒なことの 1 つは、プログラムがクラッシュまたはストールした場合 (プログラムを強制終了するには Ctrl+C を押す必要があります)、ネットワーク ポートが 1 分間ほど開いたままになることでした。したがって、すぐにプログラムを再度実行したい場合は、まずヘッダー ファイルに移動し、ポートを変更し、プログラムを作り直してから、最後に実行する必要があります。明らかに、これは非常に退屈になります。

プロセスが強制終了されるとすぐにポートが解放されるように構成する方法はありますか? Linuxの設定、プログラムのメイクファイル、またはCのプログラムで?

編集:サーバーを作成し、プログラムをホストする特定のポートを選択するときに参照しています。

4

3 に答える 3

11

SO_REUSEADDRソケットにオプションを設定します。

int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

Beej's Guide to Network Programmingから。

于 2009-06-17T17:55:03.087 に答える
1

あなたが書いているプログラムはサーバーだと思いますので、既知のポートを使用する必要があります。その場合は、Cogsy が指摘したように、ソケットで SO_REUSE_ADDR オプションを使用する必要があります。

一方、クライアント SW を作成している場合は、特定のポートを選択しないようにして、システムがランダムなポートを渡せるようにする必要があります。

于 2009-06-17T17:58:36.963 に答える