>Все верно, пакеты могут теряться, скорость выше (отсутствие ожидания подтверждения).
>Обработка потери пакетов в этом случае на стороне приложения.
>
>Как я понял передача идет на максимуме возможностей? Да, я пробовал на максимуме,- в этом случае в TCP/IP пересылаются практически всегда множество пакетов за один раз.Возможное решение,- встроенная пауза в 5мс, тогда всё работает чётко, но не так быстро.
В UDP/IP теряются до 25% сообщений на максимуме. При паузе в 0,5мс,- все пакеты доходят без потерь.
При этом я также попробовал CAN-бус,- он при задержке в 0,5 мс оказывается быстрее тисипи и удп с такими же задержками, при том что работает на 250Кбит/с!!!
>Хаб штука железная однако одно дело ваш ноут который тупо только слушает
>что в проводах, другое дело приемная сторона которая может и посылать
>пакеты в тоже время, т.е. если не фул-дуплекс (да и с
>ним может), то хаб в ноут может отдавать весь поток, а
>в приемную сторону не весь (т.к. коллизии мешают).
Это идея!!! Спасибо большое,- обязательно проверю работу программы без "Ваершарка". При УДП вижу в нём при этом исключительно удп сообщения от одного к другому, то биш параллельно ничего не происходит. В ТСП конечно тратиться время на подтверждение, но так как отсылающая сторона ничего не посылает, пока не получит ответа,- коллизий должно бы не происходить. Единственное слабое место,- "Ваершарк". Интересно, как он работает? Принимает поток и направлаяет его дальше?
>Дальше, сетевая карта
>может работать на приемной стороне чуть медленнее чем положено, например что-то
>фигово с сопряжением с системной платой (наука о контактах) как результат
>потери на приемной стороне.
Сетевой карты как таковой нет,- всё происходит в процессоре(MPC 5200B). Проверить скорость,- хм, даже не знаю как,- приходиться полагаться на документацию, а в реализации конечно могут быть глюки...
>[оверквотинг удален]
>
>выш вы приводили кусок кода сервера где:
> if (length != 0)
>
> {
>
>printf("%s.%ld\t\t%s",puffer_our_time,tv.tv_usec,puffer_find_number_time);
> }
>Это в файл перенаправлено или на консоль? (консоль имеет свои задержки).
>stdout - строчная буфферизация. может быть причиной.
Я перенаправляю с консоли в файл( ./server > abc.txt), - чтобы не тратилось время на вывод сообщений и отправку их на консоль, которая находится на ноуте(у машин нет ни экранов, ни клавиатуры)-дополнительное время и коллизионы. Кроме того могу затем внимательно весь файл изучить. Пробовал раньше и с (fprintf),- там примерно те же проблемы.
>Как выше писал может причина с fsync. Можно попробовать проверить так -
>создать мега-буфер (так чтобы туда минут 5 лога поместилось) в памяти
>и писать не в файл (fprintf), а в этот буфер (sprintf),
>когда буфер забьется сбросить его в файл и потом проанализировать, а
>были ли задержки в таком случае.
Посмотрел сейчас ман к fsync,- получается с его помощью я могу писать пакеты без буфферизации в printf i fprintf(хотя есть ли она в fprintf не знаю точно) сразу в память, так? Я пока не понял, как мне это сделать, надо будет в понедельник посмотреть на работе повнимательнее. Также попробую с мега-буфером,- спасибо большое за идею!
>По поводу PUSH - есть опция включающая этот режим (setsockopt(TCP_NODELAY) - отключить
>алгоритм Нэгла), без нее флаг не ставиться если не системная настройка
>(может быть какой-то тюнинг сделан в той же embedded linux?).
PUSH в тсп у меня обычно включён по умолчанию. Видимо тюнинг. Хотя я пробовал "выключать" режим Нэгла, - тогда пакеты отсылались сразу по мере поступления, но после десятого(в среднем) отсылка приостанавливалась и шло ожидание ответа или возможно просто ответ поспевал к этому времени. В момент приёма и обработки подтверждения скапливалась очередная порция пакетов,- которые и отсылались "кучкой" в следующем сообщении(обозначил так евернет-пакет, так как пакет под свой стринг определил ранее).
>пользователь обычный или рут? это к вопросу приоритета, а мало ли... :)
>это я уже фантазирую.
на машинах рут, других работающих приложений нет.