The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"TCP/IP в режиме реального времени"
Отправлено vic, 27-Июл-07 17:45 
>Насчёт ошибки в коде, - вполне возможно, опыта у меня толком в
>программировании практически нету.
>Что касается UDP,- попробовал сегодня, однако теряются некоторые сообщения, как и положено,
>насколько я понимаю в udp. Но зато скорость на много порядков
>выше и никаких проблем с пересылкой нескольких пакетов за один раз...

Все верно, пакеты могут теряться, скорость выше (отсутствие ожидания подтверждения).
Обработка потери пакетов в этом случае на стороне приложения.

Как я понял передача идет на максимуме возможностей?

>
>Что меня удивляет с udp,- когда контролирую пересылку с помощью Wireshark, вижу,
>что все пакеты были отосланы и находились в проводе. Но в
>сохранённом файле некоторых сообщений не хватает. В конце персылки совсем выпадают
>последние 20-30 сообщений. Если я правильно понимаю,- это означает, что проблемы
>возникают н апринимаюъей стороне. Маленкий буфер? Или что могло бы это
>быть ещё.
>Для информации,- связь происходит в маленькой сетке с одним хабом, двумя машинами(с
>embedded Linux,PowerPC) и контролирующим работу Ноутбуком, где и работатет Wireshark.

Хаб штука железная однако одно дело ваш ноут который тупо только слушает что в проводах, другое дело приемная сторона которая может и посылать пакеты в тоже время, т.е. если не фул-дуплекс (да и с ним может), то хаб в ноут может отдавать весь поток, а в приемную сторону не весь (т.к. коллизии мешают). Дальше, сетевая карта может работать на приемной стороне чуть медленнее чем положено, например что-то фигово с сопряжением с системной платой (наука о контактах) как результат потери на приемной стороне. Дальше пошли по стеку вверх, на каждом уровне могут какие-то свои проблемы (режим promiscous может например снижать скорость приема), доходим до записи в файл:

выш вы приводили кусок кода сервера где:
      if (length != 0)
              {
            printf("%s.%ld\t\t%s",puffer_our_time,tv.tv_usec,puffer_find_number_time);
          }
Это в файл перенаправлено или на консоль? (консоль имеет свои задержки).
stdout - строчная буфферизация. может быть причиной.
Как выше писал может причина с fsync. Можно попробовать проверить так - создать мега-буфер (так чтобы туда минут 5 лога поместилось) в памяти и писать не в файл (fprintf), а в этот буфер (sprintf), когда буфер забьется сбросить его в файл и потом проанализировать, а были ли задержки в таком случае.

По поводу PUSH - есть опция включающая этот режим (setsockopt(TCP_NODELAY) - отключить алгоритм Нэгла), без нее флаг не ставиться если не системная настройка (может быть какой-то тюнинг сделан в той же embedded linux?).

пользователь обычный или рут? это к вопросу приоритета, а мало ли... :) это я уже фантазирую.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру