Russian Qt Forum

Qt => Работа с сетью => Тема начата: YvenTitan от Январь 13, 2017, 10:31



Название: Проверка на переполнение приемного буфера
Отправлено: YvenTitan от Январь 13, 2017, 10:31
Доброе утро
У меня такая сложность. Я пересылаю много данных и часто с серверной части на клиентскую. Минут через 10 работы программы появляются признаки того, что часть пакетов теряются. Клиентская часть написана с помощью класса, наследованного от QTcpSocket.
Можно как-то проверить, было переполнение приемного буфера клиентской части или нет?


Название: Re: Проверка на переполнение приемного буфера
Отправлено: Пантер от Январь 13, 2017, 10:46
> Клиентская часть написана с помощью класса, наследованного от QTcpSocket
Извиняюсь, нахрена?


Название: Re: Проверка на переполнение приемного буфера
Отправлено: YvenTitan от Январь 13, 2017, 10:47
А как правильнее?


Название: Re: Проверка на переполнение приемного буфера
Отправлено: Пантер от Январь 13, 2017, 10:52
Не наследоваться.


Название: Re: Проверка на переполнение приемного буфера
Отправлено: YvenTitan от Январь 13, 2017, 10:54
Что это даст?


Название: Re: Проверка на переполнение приемного буфера
Отправлено: Пантер от Январь 13, 2017, 11:01
Это даст нормальную архитектуру. А на счет переполнения я не понял, объясни подробнее.


Название: Re: Проверка на переполнение приемного буфера
Отправлено: YvenTitan от Январь 13, 2017, 11:10
Как я понимаю, есть буфер, из которого вычитываются пришедшие данные с помощью функции socket->readAll(). Если слишком медленно вычитывать данные, то этот буфер переполнится и пришедшие данные начнут теряться. Возможно, я не так себе все представляю.
Вопрос в том, можно ли как-то проверить, переполнился этот буфер или нет?


Название: Re: Проверка на переполнение приемного буфера
Отправлено: Пантер от Январь 13, 2017, 11:19
socket->bytesAvailable () покажет сколько данных в буфере. Но пакеты не будут теряться, буфер просто будет расти и расти.


Название: Re: Проверка на переполнение приемного буфера
Отправлено: YvenTitan от Январь 13, 2017, 11:26
Он может вырасти на десятки мегабайт? Я смотрю с помощью диспетчера задач, и он показывает, что приложение не "ворует" память в больших количествах


Название: Re: Проверка на переполнение приемного буфера
Отправлено: Пантер от Январь 13, 2017, 11:28
Может больше, чем на десятки. Скорее всего, у тебя проблема где-то в другом месте. Если бы привел код, можно было бы точнее сказать.


Название: Re: Проверка на переполнение приемного буфера
Отправлено: cuntroll от Январь 25, 2017, 09:34
на десятки, но не до бесконечности, т.к. SO_RCVBUF таки ограничен максимальным значением int'a  ;D


Название: Re: Проверка на переполнение приемного буфера
Отправлено: Пантер от Январь 25, 2017, 09:39
на десятки, но не до бесконечности, т.к. SO_RCVBUF таки ограничен максимальным значением int'a  ;D
У меня как-то память текла гигами, долго не мог понять, в чем проблема. А проблема оказалась в том, что я запускал QProcess и читал его stdout, а на stderr клал болт - в итоге у меня в stderr все копилось и копилось... Решилось все  закрытием неиспользуемых каналов.