プログラムのクラッシュ時にネットワークポートが開いたままになるのを防ぐ方法
-
06-07-2019 - |
質問
私は、前学期にコンピューターネットワーキングを使い、プロジェクトでLinuxで(gccを使用して)Cプログラミングを行いました。私が走り続けた非常に退屈なことの1つは、プログラムがクラッシュまたはストールした場合(Ctrlキーを押しながらCキーを押して強制終了する必要がある場合)、ネットワークポートが1分ほど開いたままになることでした。そのため、プログラムをすぐに再度実行する場合は、最初にヘッダーファイルに移動し、ポートを変更し、プログラムを再作成してから、最後に実行する必要があります。明らかに、これは非常に手間がかかります。
プロセスが強制終了するとすぐにポートが解放されるように設定する方法はありますか? Linuxの設定を使用するか、プログラムのmakefileを使用するか、プログラムでCを使用しますか?
編集:サーバーを記述し、プログラムをホストする特定のポートを選択するときに言及しています。
解決
ソケットでオプション SO_REUSEADDR
を設定します。
int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
他のヒント
2分くらいだと思う:)
@Cogsyが指摘したように、 SO_REUSEADDR
ソケットオプションはあなたの友人です。
TCPの状態に慣れてください。問題を引き起こすのは TIME_WAIT
状態です:
作成しているプログラムはサーバーであると想定しているため、既知のポートを使用する必要があります。その場合は、Cogsyが指摘したように、ソケットでSO_REUSE_ADDRオプションを使用する必要があります。
クライアントswを作成している場合は、特定のポートを選択しないようにして、システムがランダムなポートを渡すことができるようにします。
所属していません StackOverflow