2016-07-24 44 views
2

我正在使用libssh。
在致電ssh_channel_write後,我必須知道是否有數據要讀取。 (但我不想檢索數據
如果沒有要讀取的數據(例如10s後),我會再次撥打ssh_channel_write
ssh_channel_readssh_channel_read_nonblocking都不能這樣做。 (並且使用SSH_READ_PENDING檢查ssh_get_status也不起作用。)
有什麼方法可以解決這個問題嗎?libssh我如何知道是否有數據可讀?

回答

1

It's NonBlocking ...

使用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. 
+0

其實,我用'ssh_channel_read_nonblocking'終於做這項工作。 – Caesar