Время поступления пакета на соккет.
От: HighVoltage  
Дата: 23.03.07 10:57
Оценка:
Добрый день.
Возник следующий вопрос.
Пишу приложение на C++ с сокетами. У меня следующая проблема:
создаю отдельный поток который получает пакеты с сокета (recvfrom()) и сразу же делаю вызов GetSystemTime(&sTime). Т.е. у меня в sTime время выборки нового пакета из очереди пакетов на соккете. Проблема в том что в этом же потоке я обрабатываю данный пакет и это может занять некоторое время, что накопиться очередь из входящих пакетов, а время прихода пакета для меня очень важно. Можно ли и как брать время пакета, именно время поступления его на сетевую карту а не время извлекания его из очереди пакетов. Существует ли данные записи в ОС.
Использую Win XP.
Или лучше сделать еще поток на обработку пакетов? Чтобы 1-н поток только принимал пакеты и записывал их время, записывал в очередь которую обрадбатывает другой поток?




23.03.07 15:16: Перенесено модератором из 'C/C++' — Кодт
Re: Время поступления пакета на соккет.
От: zaufi Земля  
Дата: 23.03.07 11:07
Оценка:
Здравствуйте, HighVoltage, Вы писали:

HV>Или лучше сделать еще поток на обработку пакетов? Чтобы 1-н поток только принимал пакеты и записывал их время, записывал в очередь которую обрадбатывает другой поток?


конечно же обработка должна быть в другом thread'e!
принимающий thread всего лишь пробивает время и ставит пакет в очередь на обработку, и если эта очередь переполняеца (!) начинает "сливать" пакеты (не давая задосить сервер)...
многое конечно зависит от того что это за сервер... должен ли он слать ответы на запросы или просто их регистрирует? какова ценность пакетов? можно ли их выбрасывать?
Re[2]: Время поступления пакета на соккет.
От: Аноним  
Дата: 23.03.07 11:43
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>конечно же обработка должна быть в другом thread'e!

Z>принимающий thread всего лишь пробивает время и ставит пакет в очередь на обработку, и если эта очередь переполняеца (!) начинает "сливать" пакеты (не давая задосить сервер)...
Z>многое конечно зависит от того что это за сервер... должен ли он слать ответы на запросы или просто их регистрирует? какова ценность пакетов? можно ли их выбрасывать?

Спасибо!

Ответы на запросы слать не должен. Выбрасывать — да можно. С данными внутри пакета ничего не делается. Их надо просто передать дальше. А обрабатывается как раз время появления пакета.

Ещё раз спасибо за быстрый ответ.
Re: Время поступления пакета на соккет.
От: Michael Chelnokov Украина  
Дата: 23.03.07 12:23
Оценка: 4 (1)
Здравствуйте, HighVoltage, Вы писали:

HV>Можно ли и как брать время пакета, именно время поступления его на сетевую карту а не время извлекания его из очереди пакетов. Существует ли данные записи в ОС.


Да, существуют, но увы, на уровне ядра. Сколько времени пройдет между получением драйвером пакета и возвратом из recvfrom — это неопределено. Ты правильно определил главный фактор, который на это время влияет. Сделай так чтобы один поток у тебя всегда висел в recvfrom, чтобы задержка передачи пакетов твоему приложению была как можно меньше.
Re[2]: Время поступления пакета на соккет.
От: HighVoltage  
Дата: 23.03.07 12:28
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, HighVoltage, Вы писали:


HV>>Можно ли и как брать время пакета, именно время поступления его на сетевую карту а не время извлекания его из очереди пакетов. Существует ли данные записи в ОС.


MC>Да, существуют, но увы, на уровне ядра. Сколько времени пройдет между получением драйвером пакета и возвратом из recvfrom — это неопределено. Ты правильно определил главный фактор, который на это время влияет. Сделай так чтобы один поток у тебя всегда висел в recvfrom, чтобы задержка передачи пакетов твоему приложению была как можно меньше.


Спасибо. Значит вариант только 1-н. Буду его пользовать.
Re[2]: Время поступления пакета на соккет.
От: TarasCo  
Дата: 23.03.07 12:29
Оценка:
Все это хорошо, но если Вам нужны точности в районе 10мс( и меньше ) врядли что то надежное получиться. А если требования к точности ниже, непонятно, что за обработка пакета длится так долго?
Да пребудет с тобою сила
Re[3]: Время поступления пакета на соккет.
От: Michael Chelnokov Украина  
Дата: 23.03.07 15:03
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>А если требования к точности ниже, непонятно, что за обработка пакета длится так долго?


Ждет скорее всего чего-нибудь во время обработки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.