upd2. Решено. Установил OBS и в источнике показал браузер (ссылку).
вот код
EASTL ?)
size_t
Integral promotion не выполняется по своему определению. else
ожидается строго неотрицательное значение (sizeof(int) - 10)
. О проверке на неотрицательность мы ровно так же забыли, как и о проверке переполнения с беззнаковым размером.int
. И знаешь что? Там UB изо всех щелей торчит в коде. Тут размер выделили, там умножили, сям прибавили и... ой... UB...int
наступает уже просто тогда, когда ты решаешь выделить битовую матрицу 8192x8192 с ячейкой в 64 бита. Или битовый объем 512*512*512 с ячейкой 32 бита. Там выходит ровно 4ГБит информации. Да, такие размеры иногда бывают нужны. Это всего 536МБ.int
в качестве размера все время приходится проверять на соответствие диапазону вместо одиночной проверки для беззнакового.тенденция избегать size_t из-за того, что он является беззнаковым, например, чтобы не попасть на неожиданные signed/unsigned promotion'ы или остатки по модулю 2^N ?
size_t
? К обозначенному в цитате еще вернемся отдельно.size_t
? потому что пакеты UDP быстрее проскакивают через маршрутизаторы, не встречая на своем пути интересные алгоритмы управления потоком, которые применяются к пакетам TCP
template< typename TImplementation >
class Cloneable
{
public:
std::unique_ptr<TImplementation> Clone() const;
// ...
};
class MyClass : public BaseClass, public Cloneable<MyClass>
{
friend class Cloneable<MyClass>;
// ...
};
static_cast
лично я никакой не вижу. Приведение типа времени трансляции с полной проверкой на соответствие. Никаких проблем нет.
Конкретику я все так же не могу выдать потому что по такому описанию надо смотреть код. А это может занять много времени, чего я не могу тебе предоставить.
Поэтому я просто опишу то, что подозреваю исходя из твоего описания.
Короткие датаграммы - это хорошо. В локальной петле MTU имеет размер 64КБ. Пакеты в 1КБ - это уже хорошо.
Шаринг сокета - это одна из причин потери пакетов. Вот попробуй угадать, кто должен принять трафик, когда сокет одновременно читают N клиентов? Там просто кто первый прочитал, того и тапки.
Пакеты в локальной петле для протокола UDP теряться будут только если ты их шлешь без меры. У локальной петли есть свой промежуточный буфер для передаваемых данных. Когда этот буфер забивается данными, а на том конце их так и не начали читать,
sendto
возвращает тебе ошибку, которую ты должен разобрать и понять.Поэтому я и подозреваю что у тебя ошибки не обрабатываются.
Проверь попутно размеры буфера приема и буфера отправки в своем сокете. Это делается через
getsockopt
или его аналог для Qt. В POSIX свойства называютсяSO_RCVBUF
иSO_SNDBUF
.