X11

為什麼在 libssh2 x11 轉發範例中套接字號加一?

  • December 15, 2020

我正在尋找 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 語句中 socked 會增加(+ 1)。有人可以解釋一下嗎?

可能與偵聽套接字有關-我看到兩個:

# 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 (沒有@)…那麼背景是什麼?…

這是呼叫所select要求的:

nfds 此參數應設置為三組中任何一組中編號最高的文件描述符,加 1。

sock包含集合中編號最高的文件描述符,因此第一個參數selectsock + 1.

引用自:https://unix.stackexchange.com/questions/624538