Есть ли способ проверить данные в течение определенного времени в asio?Проверьте данные с указанием времени?
У меня есть клиент с ASIO сокета, который имеет метод
bool ASIOClient::hasData()
{
return m_socket->available();
}
И я хотел бы иметь какой-то задержки здесь, так что он проверяет данные на как 1 секунду макс и возвращает более Ealy. Более того, я не хочу опросить его по очевидной причине, что это займет секунду. Reaseon, почему я использую это, заключается в том, что я отправляю данные клиенту и жду ответа. Если он не отвечает в определенное время, я бы закрыл сокет. То, о чем упоминается hasData.
Я знаю, что это возможно с выбором и fd_set.
В ASIO на клиента создается в Accept метод класса сокета сервера, а затем используется для обработки запросов и отправки данных к тому, кто подключен здесь.
int ASIOServer::accept(const bool& blocking)
{
auto l_sock = std::make_shared<asio::ip::tcp::socket>(m_io_service);
m_acceptor.accept(*l_sock);
auto l_client = std::make_shared<ASIOClient>(l_sock);
return 0;
}
Предпочитаете [опрос (2)] (http://man7.org/linux/man-pages/man2/poll.2.html) на 'select' –
@BasileStarynkevitch Я разрабатываю для Windows. Но я знаю, что могу выбрать с тайм-аутом (или здесь опрос). Но как я могу сделать это на сокете Asio? Имеет ли он какую-либо подобную функцию для этого? – BennX
Это конкретная операционная система. Я ничего не знаю о Windows. Задайте другой вопрос (и пометьте его в Windows) –