最大1つの接続のみを受け入れ、他の接続を破棄するサーバープログラムが必要です。どうすればこれを達成できますか?
3 に答える
accept()
単一の接続のみ。
典型的なサーバールーチンは次のとおりです。
s = socket(...);
bind(s, ...);
listen(s, backlog);
while (-1 != (t = accept(s, ...))) {
// t is a new peer, maybe you push it into an array
// or pass it off to some other part of the program
}
呼び出しが完了するたびaccept()
に、新しい接続のファイル記述子が返されます。単一の接続のみを受信したい場合は、一accept()
度だけ。この後、おそらくリスニングが終了したので、サーバーも閉じます。
s = socket(...);
bind(s, ...);
listen(s, backlog);
t = accept(s, ...);
close(s);
// do stuff with t
一度に1つの接続のみを処理し、その接続が閉じた後、リスニングを再開し、上記のループを実行して、閉じるaccept()
までさらに接続を受け入れt
ます。
訂正は以下を参照してください:listenメソッド
で受け入れられる要求の量を定義できます。
listen(socketDescription, numberOfConnectionsPending);
2番目のパラメーターは、保留中の接続の数を設定するためのものであり、接続自体の数を設定するためのものではありません。
numberOfConnectionsを1に設定すると、サーバーにリクエストを送信する他のすべてのクライアントはタイムアウトエラーを受け取ります。
ここでより多くの情報を見つけることができます:http ://shoe.bocks.com/net/#listen
リッスンのドキュメントを間違って読みました。Mattの回答に記載されているacceptメソッドを使用する必要があります。
すべての接続を拒否しますか、それともキューを作成しますか?あなたが探しているのは、いわゆる「シングルトン」だと思います。シングルトンデザインパターンについては、ウィキパディアをご覧ください。