X11
為什麼在 libssh2 x11 轉發範例中套接字號加一?
我正在尋找 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
包含集合中編號最高的文件描述符,因此第一個參數select
是sock + 1
.