2012-04-05 8 views
1

select文の呼び出しが返ってくると、アクティブなファイル記述子が複数のクライアントの要求を処理するかどうかを調べます。イベントベースのソケットプログラミングC

select(maxfd+1, &readfds, NULL, NULL, NULL); 

つまり、selectコマンドは、readfdsセット内のファイル記述子を監視します。私の質問は、クライアントのリクエストを処理する際に、リスニングソケットにもっと多くの新しい接続が到着した場合、どのように新しい接続をキャプチャするのでしょうか?

+0

あなたがスレッドを使用する必要があります。 –

+1

現在の接続の処理が終了するまで、それはできません。もちろん、それはあなたがただ1つのスレッド/プロセスを使用していることを前提としています。 –

+4

@Abhishek Sagar:あなたは10の質問をしましたが、1つの答えを受け入れませんでした。彼らがあなたの問題を解決した場合、回答を受け入れたものとしてマークしてください。 – orlp

答えて

3

select()のreadfdセットでサーバーソケットを監視すると、そのことを知ることができます。サーバーソケットを読み取り可能にすることを選択します。つまり、待機中の接続があることを意味します。

... 
FD_SET(server_sock, &readfds); 

select(maxfd + 1,&readfds,NULL,NULL,NULL); 
if(FD_ISSET(server_sock, &readfds)) { 
    int new_client = accept(server_socket, ...); 
    //add the new client to descriptors to monitor, etc.. 

((受け入れ、OSは最初のTCPハンドシェイクを行い、接続を確立していることに注意してください)ちょうどあなたのプログラムのために接続が使用可能になります)

関連する問題