我使用 libssh2 登录远程计算机,然后调用 libssh2_channel_exec 执行守护程序,守护程序将选择一个可用的 tcpip 端口并将选择的 prot 打印到控制台(stdio)。然后,守护进程将监听传入连接的端口。在这些步骤之后,客户端将通过“libssh2_channel_read”从 stdio 读取选定的 tcp 端口。我可以得到正确的值。但问题是:当我关闭 libssh2 通道(libssh2_channel_close())时,程序将被阻塞,直到远程程序退出。有什么方法可以在不关闭远程程序的情况下关闭频道?因为我仅将 ssh 用于登录名和可用的 prot 编号,所以这就够了。
另外,远程程序使用Qt的QCoreApplication,打印出可用的prot后,会进入app.exec()的事件循环响应客户端,所以打印完端口号后不能立即退出。