私はこの小さなサーバー アプリケーションをピュア C で作成しました。これは、特定のポートで着信接続をリッスンする、非常に単純なものです。
通常のソケット初期化手順に従い、ポートに を作成し、socket()
それを a と言い、への着信接続を待機して無限にループします。bind()
listen()
select()
accept()
すべてがうまくいき、魔法のように機能しますが、数か月間実行したままにしておくと、アプリケーションサーバーがそれに気付かずに実行し続けている間、リッスンポートが閉じます。言われていない。
問題は、アプリケーションが気にせずにポートが閉じられているのはなぜですか? また、それを防ぐにはどうすればよいでしょうか?
それは期待される動作ですか?何らかの例外をチェックするか、必要に応じてリッスンしているソケットで「ヘルスチェック」を行う必要がありますか?
コード: https://gist.github.com/Havenard/e930be035a3bee75c018 (はい、私は0
エラーの手がかりとして使用していることに気付きました。それは悪い練習などですが、コメントで説明したように、質問には関係ありません。ソケットファイル記述子を設定して0
、ループを停止し、アプリケーションをシャットダウンします)。