1

select ステートメントの呼び出しが を返すと、アクティブなファイル記述子をチェックして、複数のクライアントの要求を処理します。

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

つまり、select コマンドは、readfds セット内のファイル記述子を監視します。私の質問は、クライアントのリクエストの処理時に、より多くの新しい接続がリッスン ソケットに到着するときに、プログラムがそれらの新しい接続をどのようにキャプチャするかということです。

4

1 に答える 1

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 ハンドシェイクを実行して接続を確立することに注意してください。accept() はプログラムで接続を利用できるようにするだけです)

于 2012-04-05T12:09:47.727 に答える