1

成功するまで一定の間隔でソケットを開いてサーバーに接続することを再試行するループを持つクライアント tcp ソケット (c++) があります。

プログラムのバグにより、close接続に失敗した後にファイル記述子が呼び出されず、呼び出し時と再接続の再試行時にループの次の反復で同じ (開いている) 記述子が再び使用されましsocketconnect

Linux マシンではこれは問題を引き起こしませんでしたが、HPUX では最終的にエラー 24 - 'Too many open files'' が発生しました - lsof はこれらを として示しましTCP *:* (IDLE)た。

Linux と HPUX の違いは何ですか?

4

2 に答える 2

2

これは、HPUX がカーネルにソケットを追加したことに由来していると思います。私の記憶が正しければ (1980 年代後半から)、彼らは共有可能なオブジェクト ライブラリとして Berkeley Sockets を追加しました。これは基本的に、ファイル I/O システムの上に 1 つまたは 2 つのレイヤーを追加したものです。

UX が依然としてそのように動作するということは、socket() 呼び出しが未使用のファイル記述子を再利用していないことを示しています。これはおそらく、それらを認識していないためであり、それを追加する任務を負ったメンテナンス エンジニアはいません。Linux では、socket() は他の主要なコンポーネントと同じくらいカーネルの一部であるため、もちろん、再利用できるファイル記述子を認識しています。

于 2009-11-11T18:58:41.667 に答える
0

プロセスが同時に開くことができるファイルの制限は、 HPUXではデフォルトで 60 ですが、Linux では 1024です。

于 2009-11-11T19:01:20.197 に答える