Время ожидания ответа сокета с помощью опроса - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть многопоточная программа C ++, которая использует пул сокетов для чтения и записи.Поток отправителя отправляет HTTP-запросы, используя следующий доступный сокет.Получатель therad опрашивает пул сокетов (используя метод poll ()) и считывает ответы HTTP.Как поток получателя может обнаружить возможное время ожидания ответа HTTP из сокета пула?

1 Ответ

2 голосов
/ 09 февраля 2012

Быстрый пример с макушки головы:

  1. когда вы отправляете запрос, создайте объект, содержащий fd, любую информацию о логическом соединении, которая вам нужна, и абсолютное время, в которое вы посчитаете, что оно истекло
  2. сохраняет приоритетную очередь этих объектов в порядке времени, поэтому наиболее скоро истекающий всегда будет впереди (это вырождается в очередь FIFO, если все запросы получают одинаковое время ожидания)
  3. при опросе рассчитайте время ожидания от сейчас до первого абсолютного времени в очереди
  4. если опрос возвращает ноль (или только каждый раз, когда он просыпается), получите текущее время и пройдитесь по очереди, определяющей время для любых запросов, время ожидания которых истекло
  5. когда вы получите успешный ответ, вам также необходимо удалить связанный объект из очереди
...