Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2018, 14:49   #1
Shadowfirst
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 13
По умолчанию Системой дропаются UDP пакеты

Есть такая ситуация. Две машины соеденины точка-точка. Одна передающая, другая принимающая. Передаются UDP пакеты. Но на принимающей присловутая функция recv принимает не все пакеты. Я знаю что такое протокол UDP, и говорить о негарантированной доставке не нужно. При этом в Wireshark пропущенные пакеты видятся и отличий кроме контрольной суммы и id нет. Передача идёт по гигабитному интерфейсу и загруженность канала в диспетчере выдаёт не больше 1.5%(полтора процента). Также проверял заполненность буфера приёма при работе программы, она не превышает размера одного пакета(1470) при имеющимся 8192. Загрузка системы при работе принимающей программы 0-3%.Вопрос соответственно какие причины могут быть того что системой пакеты просто дропаются?
Shadowfirst вне форума Ответить с цитированием
Старый 03.02.2018, 15:59   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Прога чья? Исходник е?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 03.02.2018, 17:19   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Shadowfirst Посмотреть сообщение
отличий кроме контрольной суммы
Цитата:
Сообщение от Shadowfirst Посмотреть сообщение
какие причины могут быть того что системой пакеты просто дропаются
Несовпадения контрольной суммы вам недостаточная причина?
waleri вне форума Ответить с цитированием
Старый 03.02.2018, 18:13   #4
Shadowfirst
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Несовпадения контрольной суммы вам недостаточная причина?
Не достаточная так как у пакетов на сетевом уровне есть свой индетификатор пакета который индивидуальный для каждого пакета(понятное дело от 0 до 0хFFFF) и соответственно изменяется контрольная сумма загаловка. Я про эту контрольную сумму и говорил.

Последний раз редактировалось Shadowfirst; 03.02.2018 в 18:20.
Shadowfirst вне форума Ответить с цитированием
Старый 03.02.2018, 18:16   #5
Shadowfirst
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Прога чья? Исходник е?
Что дадут исходники если речь идёт о системной функции recv которая находится в блокирующем режиме и не реагирует на некоторые пакеты, которые регистрирует Wireshark. Она работает в отдельном потоке и кроме приема этот поток ни чем не занимается.

Последний раз редактировалось Shadowfirst; 03.02.2018 в 18:19.
Shadowfirst вне форума Ответить с цитированием
Старый 03.02.2018, 20:00   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Shadowfirst Посмотреть сообщение
Что дадут исходники если речь идёт о системной функции recv которая находится в блокирующем режиме и не реагирует на некоторые пакеты, которые регистрирует Wireshark. Она работает в отдельном потоке и кроме приема этот поток ни чем не занимается.
Ты на вопрос-то ответь! А то прям как депутан перед журналюгами.
---------
recv() и recvfrom() - это функции, т.е. они возвращают какое-то значение, которое можно проанализировать, если исходник есть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 03.02.2018 в 20:14.
min@y™ вне форума Ответить с цитированием
Старый 03.02.2018, 20:11   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Shadowfirst Посмотреть сообщение
Она работает в отдельном потоке и кроме приема этот поток ни чем не занимается.
Например если поток долго занят между вызовами recv
waleri вне форума Ответить с цитированием
Старый 03.02.2018, 20:23   #8
Shadowfirst
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Например если поток долго занят между вызовами recv
Занят он ровно на столько на сколько нужно времени что бы положить данные в очередь и сделать wakeup тому потоку который занимается обработкой, да и то для этого есть приемный буфер устройства в котором хранится то что не прочитано. Буфер не переполняется, проверял с помощью ioctlsocket на предмет сколько данных там находится перед чтением, и это число как я писал вначале не превышало размера одного пакета.

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Ты на вопрос-то ответь! А то прям как депутан перед журналюгами.
---------
recv() и recvfrom() - это функции, т.е. они возвращают какое-то значение, которое можно проанализировать, если исходник есть.
Код мой, и этот ответ не повлияет ни на что. А функции возвращают при удачном выполнении размер прочитанного блока. Ошибок не возвращало.
Shadowfirst вне форума Ответить с цитированием
Старый 03.02.2018, 20:34   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Shadowfirst Посмотреть сообщение
Код мой, и этот ответ не повлияет ни на что. А функции возвращают при удачном выполнении размер прочитанного блока. Ошибок не возвращало.
WSAGetLastError() проверял?

Хотя... Я хотел сначала поделиться подходящей инфой, потом мне любопытно стало, почему у меня-то работает, что я делаю не так? Задача у меня год назад была ну прям один в один как твоя - дуплекс по UDP комп <-----> устройство. Кстати, когда обмен отлаживал, тоже юзал wireshark, годная тулза.
Теперь и любопытство пропало: ты вместо того, чтобы ответить на простой вопрос, начал умничать.

Поэтому, иди в жопу.
Доклад окончил.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 03.02.2018, 21:15   #10
Shadowfirst
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
[ почему у меня-то работает, что я делаю не так?
Я так понимаю сразу все заработало. И пакеты не пропадали. До этого случая у меня также все работало в других проектах. А тут испоряются на сетевом уровне(проверял создавая сырой сокет). Вернее даже на сетевом уровне не появляются, значит системой откидывается раньше.

Последний раз редактировалось Shadowfirst; 03.02.2018 в 21:20.
Shadowfirst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UDP пакеты Артэс Общие вопросы по программированию, компьютерный форум 7 27.10.2016 02:15
Сервер принимает пакеты если клиент указывает неверный порт получателя UDP Yandex&Google C/C++ Сетевое программирование 0 12.02.2016 00:03
PHP и SOCKS5 (udp пакеты) LITH PHP 1 14.07.2013 12:15
Пакеты _Studentka_ Общие вопросы по Java, Java SE, Kotlin 0 04.11.2009 21:44
Пакеты benjaminfran Фриланс 7 20.02.2008 21:29