Как добиться опроса клиента SSH для нескольких серверов в одном потоке?

Я пытаюсь написать клиентскую программу, которая подключается к столько серверов, сколько настроено с использованием 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->? Чтобы ssh_event_dopoll мог проверять все связанные сеансы и вызывать соответствующие обратные вызовы?

0 ответов

Другие вопросы по тегам