libssh를 사용 중입니다.
ssh_channel_write
을 호출 한 후 읽을 데이터가 있는지 여부를 알아야합니다. (하지만 데이터를 검색하고 싶지 않습니다.)
읽을 데이터가 없으면 (예 : 10 초 후에) ssh_channel_write
으로 다시 전화 할 것입니다.
ssh_channel_read
과 ssh_channel_read_nonblocking
둘 다이 작업을 수행 할 수 없습니다. (ssh_get_status
을 SSH_READ_PENDING으로 확인해도 작동하지 않습니다.)
이 문제를 해결할 방법이 있습니까?libssh 읽을 데이터가 있는지 어떻게 알 수 있습니까?
2
A
답변
1
비 차단 ...
ssh_select() 함수를 사용하십시오. 그것은 일반적인 select()와 매우 유사하게 작동하지만 소켓 대신 채널을 사용합니다.
INT의 ssh_select (ssh_channel * 채널 ssh_channel * outchannels, socket_t의 maxfd, FD_SET * readfds, timeval 구조체 * 초과); 예를 들어
, 단일 채널 구현 :
ssh_channel channels[2];
ssh_channel myChannel = ssh_channel_new (ssh_session session);
channels[0] = myChannel;
channels[1] = NULL;
struct timeval timeout = (0, 200000); // 0 seconds, 200 millis
int rc = ssh_select (channels, NULL, NULL, NULL, &timeout);
if (rc > 0) {// There is a pending data.
if (rc < 0) // the ssh_select() error.
if (rc == 0) // You've got a broken connection.
실제로, 나는 마침내이 일을하기 위해'ssh_channel_read_nonblocking'를 사용합니다. – Caesar