ファイル記述子が破損しているかどうかを識別するスクリプト

ファイル記述子が破損しているかどうかを識別するスクリプト

質問:TCPソケットを使用してリモートプログラムに接続するサーバープログラムを実行しています。その数が多いです(例:20個)。私の問題は、ソケット記述子の1つが破損してEOFが受信されることです。しかし、プログラムのバグのために決して閉じられず、代わりに select() コレクションに再度追加され、不要な痛みを引き起こします。

私はそれを見つけるために何をしましたか?:DDBに接続し、それぞれに対してread(fd、..)を呼び出します。無効な記述子はゼロを返し、そこに到達しました。

これは私には効果がありますが、他のソケットのバイトを無駄にし、他の機能でエラーが発生する可能性があります。

私が探しているものは何ですか?実行中のプログラムに影響を与えずに私の目的を解決できる非侵害的なメカニズムを理解しようとしました。

ちなみに、私のNetBSDシステムはtcshだけを理解しています。

ベストアンサー1

BSD派生システムで他の実行プロセスで開いているファイル記述子を調べる正式な方法は、fstat(1)コマンド(-pそのプロセスIDを指定するオプションを含む)を使用することです。

fstatピアがTCP接続を閉じたかどうかを出力から知ることができます。

ただし、問題が実際にソースコードを含むプログラムのバグである場合は、-g適切なユーザーレベルのデバッガ(たとえば、デフォルトで提供されています)gdb

おすすめ記事