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