为什么在 libssh2 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(不带@)...那么后台是什么?...

答案1

这是什么电话select要求:

nfds 该参数应设置为三个集合中任意一个中编号最大的文件描述符,再加上 1。

sock包含集合中编号最大的文件描述符,因此第一个参数selectsock + 1.

相关内容