私は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
。