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
.