0

クライアントをリッスンするサーバーソケットがあります。このサーバーは無限ループで実行されます。接続された各クライアントが処理された後、「接続されたソケット」が閉じられます。再利用性のために、接続されたソケットのファイル記述子で setsocketopt を使用する必要がありますか? サーバーソケットファイル記述子は決して閉じられないため、そのソケットが常に存在することを望みます。

また、新しいクライアントが接続を確立するまでリッスン サーバー ソケットがブロックされていると想定しているため、これはメモリを使い果たしていません。助けてください。

ありがとう、

4

2 に答える 2

0

について考えている場合SO_REUSEADDR、新しい接続に同じソケットを再利用することはできません。また、これがあなたに多くをもたらすとは思いません。新しいものを作成することfd/socketは、たいした作業ではありません。これ以外のボトルネックが見つかります。

ただし、同じクライアントが次の要求のためにその接続を介して通信できるように、(サーバーとクライアントで) 接続を閉じないことで最適化できます。これにより、接続のセットアップ時間が短縮されます。

はい、デフォルトではリッスン ソケットがブロックされているため、accept呼び出しはブロックされます。また、これは多くのメモリを使用しません。ノンブロッキングにして、pollまたはselect新しい着信接続を決定するために使用できます。

于 2012-08-20T09:28:27.360 に答える
0

SO_REUSEADDR の目的がわからないようです。それはあなたがそれに帰する魔法の特性を持っていません。ソケットは、閉じるまで存在します。SO_REUSEADDR は、ほとんどの状況でどのソケット記述子にも必要ありません。バインド エラーが発生しない場合は、まったく必要ありません。

于 2012-08-20T23:54:07.563 に答える