如何在单个线程中为多个服务器实现SSH客户端轮询?

时间:2018-07-17 06:09:51

标签: libssh

我正在尝试编写一个客户端程序,该程序可以连接到使用SSH配置的尽可能多的服务器。

按照基本步骤操作,直到此为止。

m_ctx->event = ssh_event_new ();
m_ctx->session = ssh_new ();
m_ctx->channel = ssh_channel_new (m_ctx->session);
m_ctx->disconnect = false;

m_ctx->callbacks.userdata = m_ctx;
m_ctx->callbacks.channel_data_function = ProcessChannelData;
m_ctx->callbacks.channel_close_function = ClientOnChannelClose;

ssh_callbacks_init (&m_ctx->callbacks);

将serverIp和serverPort设置为会话。

ssh_options_set (ctx->session, SSH_OPTIONS_HOST, serverIp);
ssh_options_set (ctx->session, SSH_OPTIONS_PORT, &serverPort);

稍后我在会话上调用SSH连接。

ssh_connect (m_ctx->session);

我将事件附加到会话上,如下所示。

ssh_event_add_session (m_ctx->event, m_ctx->session);

因此,我已经将一个会话(severIp1:port1)与一个事件相关联。现在,我对该事件执行了dopoll,因此我的回调被击中并且我的数据处理发生了。

for (;;)
{
    if (m_ctx->disconnect || (ssh_get_status(m_ctx->session) & (SSH_CLOSED | SSH_CLOSED_ERROR)) != 0)
    {
        break;
    }
    ssh_event_dopoll (m_ctx->event, s_clientPollWaitTimeout);
}

现在,如果客户端必须连接到多个服务器(与我想的多个SSH会话相同),是否可以将其链接到同一m_ctx-> event? 这样ssh_event_dopoll可以检查所有关联的会话并调用适当的回调?

0 个答案:

没有答案