首页 > 解决方案 > libssh2_session_handshake 返回 -43

问题描述

这是我的 win10 上的 ssh 服务器,而不是当我从 libssh2 1.90 运行由 Visual Studio 2015 构建的名为 example-ssh2 的演示时。我看到 tcp 套接字已建立。

session = libssh2_session_init()

成功了。但是

libssh2_session_handshake(session, sock)

总是返回-43

你可以帮帮我吗?

标签: opensshlibssh2

解决方案


当连接到高延迟网络上的服务器时,我得到了这个 -43。

Libssh2.h 有这个定义...

定义 LIBSSH2_ERROR_SOCKET_RECV -43

通过像这样在 libssh2_session_init() 调用和 libssh2_session_handshake(session, sock) 调用之间添加短暂的睡眠,我能够成功地持续连接......

session = libssh2_session_init();
std::this_thread::sleep_for(std::chrono::milliseconds(300));
libssh2_session_handshake(session, sock);

通过单步调试器中的原始代码,我偶然发现了这个解决方案,并且它每次都会成功连接,所以我尝试了 sleep 并且它起作用了。我尝试了一些不同的睡眠时间,30ms 是仍然有效的最低值。

我在试图找到这种行为的解释时找到了你的帖子。我希望这种方法对你有用。


推荐阅读