【问题标题】:libssh2_channel_close will be blocked until the remote command exitlibssh2_channel_close 将被阻塞,直到远程命令退出
【发布时间】:2010-10-03 12:01:06
【问题描述】:

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

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

【问题讨论】:

    标签: linux qt libssh


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      相关资源
      最近更新 更多