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

发布于 2024-09-06 17:38:29 字数 399 浏览 4 评论 0原文

我使用libssh2登录远程计算机,然后调用libssh2_channel_exec来执行守护程序,守护程序将选择一个可用的tcpip端口并将所选的prot打印到控制台(stdio)。然后,守护进程将侦听传入连接的端口。 在这些步骤之后,客户端将通过“libssh2_channel_read”从stdio读取选定的tcp端口。我可以获得正确的值。 但问题是: 当我关闭libssh2通道(libssh2_channel_close())时,程序将被阻塞,直到远程程序退出。有没有什么方法可以在不关闭远程程序的情况下关闭通道?因为我仅使用 ssh 进行登录和可用的协议号,所以这就足够了。

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

I use libssh2 to login a remote computer, then call libssh2_channel_exec to execute a daemon program, the daemon program will then select a available tcpip port and print the selected prot to console(stdio). Then, the daemon will listen the port for the incomming connect.
After these step, the client will read the selected tcp port from stdio by "libssh2_channel_read". I can get the right value.
But the question is :
When I close the libssh2 channel (libssh2_channel_close()), the program will be blocked, until the remote program is exit. Are there any methods to close the channel whithout close the remote program? Because I use ssh only for the login and the available prot number, that's enougn.

In addition, the remote program uses Qt's QCoreApplication, so after it printing the available prot ,it will enter the event loop of app.exec() to respond the client, so , it must not exit immediately after print the port number.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静水深流 2024-09-13 17:38:29

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

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

There a function in libssh2 can solve my problem..:)
"libssh2_session_set_blocking"
libssh_session_set_blocking(mysession,0);//this will set the libssh2 working whith non-blocking mode.

The left work to do is ensure the client read all the output of the server, without blocking ,I must control the EOF myself. :)
Thanks Stackoverflow, thanks google!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文