我使用libssh2登录远程计算机,然后调用libssh2_channel_exec执行守护程序,然后守护程序将选择一个可用的tcpip端口并将选定的prot打印到控制台(stdio)。然后,守护进程将监听输入连接的端口。
在这些步骤之后,客户端将通过“libssh2_channel_read”从stdio读取所选的tcp端口。我能得到正确的价值。
但问题是:
当我关闭LIPSHS2通道(LIbsH22hanhanixCeleIe())时,程序将被阻塞,直到远程程序退出。有没有什么方法可以在不关闭远程程序的情况下关闭频道?因为我只对登录名和可用的prot号使用ssh,所以这是enougn。
此外,远程程序使用QT的QCORE应用程序,因此在打印可用的PROT之后,它将进入App.Excor()的事件循环以响应客户端,因此,在打印端口号之后,它不能立即退出。

最佳答案

libssh2中有一个函数可以解决我的问题..:)
“libssh2_session_set_阻塞”
libssh_session_set_blocking(mysession,0);//这将设置libssh2在非阻塞模式下工作。
剩下的工作是确保客户端读取服务器的所有输出,而不阻塞,我必须自己控制eof。:)
谢谢stackoverflow,谢谢google!

关于linux - libssh2_channel_close将被阻止,直到远程命令退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3083238/

10-15 02:17