crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

call_me_Frank
  опции профиля:
сообщение 26.1.2014, 14:09
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как получать количество переданных сокетом байт по мере отправки? пробовал разные примеры - нужного результата не получил
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 3)
kuzulis
  опции профиля:
сообщение 26.1.2014, 21:03
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Законнектиться к сигналу QIODevice::bytesWritten(qint64).

Но если быть точным, то эта штука работает в Qt-шных сокетах некорректно, ИМХО (а может оно так и планиорвалось..).
Суть в том, что bytesWritten() излучается после успешного write(). Но это неправильно, т.к. сокеты в Qt неблокирующие, поэтому вызов write() гарантирует только факт передачи массива данных из юзер-спейса в ядро (FIFO драйвера). Таким образом реально данные могут быть еще не переданы (например, когда их очень много), но bytesWritten() уже излучится.

Поэтому - никак без костылей, ИМХО.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
call_me_Frank
  опции профиля:
сообщение 27.1.2014, 5:06
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

Спасибо сказали: 0 раз(а)




Репутация:   0  


окей, ясно...но поскольку интерес направлен именно в сторону количества переданных данных по сети, а не в буффер, то не могу не спросить насчет костылей - какие есть варианты получить достоверные и своевременные данные?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 27.1.2014, 10:43
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


ИМХО, никак. Не юзать Qt-шные сокеты.

Или перевести открытый сокет из неблокирующего режима в блокирующий (через setSockOptions(), или через платформо-зависимые ioctl()). И тогда придется этот сокет использовать в отдельном потоке потому что write() будет блокирующим. Тогда bytesWritten() будет корректно излучаться.. Как то так.. В теории. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 3.6.2025, 15:11