libssh2 x11転送の例では、ソケット番号が1ずつ増加するのはなぜですか?

libssh2 x11転送の例では、ソケット番号が1ずつ増加するのはなぜですか?

私はlibssh2ソースコード(example / x11.c)でx11転送の例を探しています。 x11_send_receive 関数で次のコードを見ることができます。

rc = select(sock + 1, &set, NULL, NULL, &timeval_out);
if(rc > 0) {
    memset((void *)buf, 0, bufsize);

    /* Data in sock*/
    rc = read(sock, buf, bufsize);
    if(rc > 0) {
        libssh2_channel_write(channel, buf, rc);
    }
    else {
        free(buf);
        return -1;
    }
}

selectステートメントに含まれる値が増加(+ 1)される理由を理解できません。誰かがこれを説明できますか?

リスニングソケットに関連している可能性があります。 2つあります。

# netstat -lxn | grep /tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     32746    /tmp/.X11-unix/X0
unix  2      [ ACC ]     STREAM     LISTENING     32745    @/tmp/.X11-unix/X0

sockは/tmp/.X11-unix/X0パス(@なし)に接続されています。それでは、その背後に何がありますか? ...

答え1

これは何ですか?select電話必要:

nfds このパラメーターは、3セットのうち最も高い番号のファイル記述子に1を加えた値に設定する必要があります。

sockセット内の最も高い番号のファイル記述子を含むため、最初の引数selectはですsock + 1

関連情報