libssh2_channel_close将被阻止,直到远程命令退出

时间:2010-06-21 08:56:54

标签: linux qt libssh

我使用libssh2登录远程计算机,然后调用libssh2_channel_exec来执行守护程序,然后守护程序将选择一个可用的tcpip端口并将所选的prot打印到控制台(stdio)。然后,守护进程将侦听端口以进行连接。 完成这些步骤后,客户端将通过“libssh2_channel_read”从stdio读取所选的tcp端口。我可以得到正确的价值。 但问题是:  当我关闭libssh2通道(libssh2_channel_close())时,程序将被阻止,直到远程程序退出。是否有任何方法可以在关闭远程程序时关闭通道?因为我只使用ssh登录和可用的prot号码,这就是enougn。

此外,远程程序使用Qt的QCoreApplication,因此在打印出可用的prot之后,它将进入app.exec()的事件循环以响应客户端,因此,打印端口号后不能立即退出

1 个答案:

答案 0 :(得分:0)

libssh2中有一个函数可以解决我的问题.. :) “libssh2_session_set_blocking” libssh_session_set_blocking(mysession,0); //这会将libssh2设置为非阻塞模式。

要做的左边工作是确保客户端读取服务器的所有输出,而不阻塞,我必须自己控制EOF。 :) 谢谢Stackoverflow,谢谢谷歌!