1

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

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

4

1 回答 1

0

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

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

于 2010-06-21T14:53:22.720 回答