2016-07-24 17 views
2

私はlibsshを使用しています。
ssh_channel_writeを呼び出した後、読み込むデータがあるかどうかを知る必要があります。 ()データを取得したくない場合
読み込むデータがない場合(たとえば10秒後)には、ssh_channel_writeに再度電話します。
ssh_channel_readssh_channel_read_nonblockingの両方がこれを行うことはできません。 (また、ssh_get_statusをSSH_READ_PENDINGでチェックすることはできません)
この問題を解決する方法はありますか?libssh読み込むデータがあるかどうかはどのようにわかりますか?

答えて

1

非ブロック...

ssh_select()関数を使用してください。通常のselect()と非常によく似ていますが、ソケットの代わりにチャネルを使用します。

int型ssh_select(ssh_channel *チャネル、ssh_channel * outchannels、 socket_t maxfd、FD_SET * readfds、いるstruct 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

関連する問題