libssh2 x11 전달 예시에서 소켓 번호가 1씩 증가하는 이유는 무엇입니까?

libssh2 x11 전달 예시에서 소켓 번호가 1씩 증가하는 이유는 무엇입니까?

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)되는 이유를 이해할 수 없습니다. 누군가 이것을 설명할 수 있나요?

청취 소켓과 관련이 있을 수 있습니다. 두 가지가 있습니다.

# 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.

관련 정보