Сокет - прочитайте как можно больше с тайм-аутом - PullRequest
3 голосов
/ 29 февраля 2012

Я рассмотрел пример асинхронного тайм-аута, найденный в документации asio , но мне было интересно, возможно ли разместить асинхронное чтение (до N байтов) с таймаутом S секунд, но если произойдет тайм-аут, он вернет буфер байтов, считанный до тех пор, пока тайм-аут не наступит, вместо кода ошибки.

Например, если бы я должен был выполнить чтение (recv) для 1000 байтов с тайм-аутом 10 секунд и только 300 байтов прибыло до того, как 10 секунд закончатся, я хотел бы, чтобы эти 300 байтов были возвращены - возможно ли это с помощью ASIO? или даже интерфейс сокетов Беркли?

1 Ответ

0 голосов
/ 29 февраля 2012

Да, вы можете сделать это:

  1. Установите asio запрос на чтение до , сколько бы байтов вы еще не прочитали.

  2. Установите таймер asio так, чтобы он срабатывал сколько угодно времени, пока не истечет время.

  3. Если вы прочиталиудар, который заполняет желаемое количество байтов, отмените таймер.

  4. Если вы получаете частичное чтение, настройте другое частичное чтение и другой таймер.

Но это почти никогда не разумно.Какой бы ни была ваша внешняя проблема в том, что вы думаете, что это решает, почти наверняка есть лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...