4

私はソケットプログラミングが初めてで、select()システムコールを紹介されました。私の質問は、C でサーバーを作成していて (これを行おうとしています)、select()実際に実装で呼び出しを使用したいとします。クライアントから情報を受信するサーバーを作成しようとしているので、私のアプローチは を使用しselect()、続いread()て情報を出力することです。

私が読んだドキュメントによると、入出力の準備ができている入力セット内のファイル記述子のselect()を返します。私の質問は、元のセットのどのファイル記述子が I/O の準備ができているかをどのように知ることができるかということです。過去に見た検索や例では、これを見つけることができないようです。

私のコードが以下のようになっているとしましょう:

int main() {
/* Create socket/server variables */
    int select_value;
    int this_socket;
    int maxfd;
    struct sockadder_in address; 
    fd_set allset;

    /* Bind the socket to a port */
    main_socket = socket(AF_INET, SOCK_STREAM, 0);
    if (main_socket < 0) {
        perror("socket()");
        exit(1);
    }

    Connect(main_socket, (struct sockaddr *)&address, sizeof(address));

    /* Add the socket to the list of fds to be monitored */
    FD_ZERO(&allset);
    FD_SET(main_socket, &allset);

    fd_set read_ready = allset;
    fd_set write_ready = allset;

    while (1) {
        /* Listen for a connection */
        /* Accept a connection */
        select_value = Select(maxfd+1, &read_ready, &write_ready, NULL, NULL);
        if (select_value == -1) {
            perror("select()");
            exit(1);
        }
        else if(select_value > 0) {
            /* How to access i/o ready file descriptors
            now that we know there are some available? */
        }
    }
} 
4

1 に答える 1