2

多重化を使用してクライアント/サーバー モデルのサーバー側を実装するために poll を使用しています。

サーバーが実行しているメインループがあります。各ループで、内容のあるソケットが
見つかるまで、struct pollfd の配列にあるすべての fds をチェックしています ( poll が返した番号はどこにありますか)。また、poll はタイムアウトなしで使用されます (引数として -1)。nn

したがって、リッスンしているソケットで新しい接続が要求された場合、ソケットと一部のクライアント情報を、保持しているアクティブな接続リストに挿入します。

ポーリングの配列を処理する最も効率的な方法は何ですか?

サイズ 10 の小さな配列を定義し、それ以上のクライアントがある場合は、サイズ 20 または 50 の配列にメモリを再割り当てする必要がありますか?

または、(a) struct pollfd 型の配列を解放し、(b) リストのサイズ (リスニング ソケットの場合は +1) に等しいサイズで再割り当てする必要があります => クライアントが接続を閉じるたびに (したがって、配列から要素を削除する必要があります(おそらくソケットを-1に設定して、ポーリングが無視するようにします)、配列に未使用のスペースが生じます)

おすすめは何ですか?

お時間をいただきありがとうございます


編集: クライアントが fds アレイのソケットをカバーするために切断するたびに、realloc と memmove でシフトすることで解決策を見つけたと思います。

4

1 に答える 1