プログラムのクラッシュ時にネットワークポートが開いたままになるのを防ぐ方法

StackOverflow https://stackoverflow.com/questions/1008608

質問

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

プロセスが強制終了するとすぐにポートが解放されるように設定する方法はありますか? Linuxの設定を使用するか、プログラムのmakefileを使用するか、プログラムでCを使用しますか?

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

役に立ちましたか?

解決

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

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

Beejのネットワークプログラミングガイドから。

他のヒント

2分くらいだと思う:) @Cogsyが指摘したように、 SO_REUSEADDR ソケットオプションはあなたの友人です。 TCPの状態に慣れてください。問題を引き起こすのは TIME_WAIT 状態です:

 

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

クライアントswを作成している場合は、特定のポートを選択しないようにして、システムがランダムなポートを渡すことができるようにします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top