我正在寻找 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(不带@)...那么后台是什么?...
答案1
这是什么电话select
要求:
nfds
该参数应设置为三个集合中任意一个中编号最大的文件描述符,再加上 1。
sock
包含集合中编号最大的文件描述符,因此第一个参数select
是sock + 1
.