![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
call_me_Frank |
![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 20.10.2010 Пользователь №: 2129 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Как получать количество переданных сокетом байт по мере отправки? пробовал разные примеры - нужного результата не получил
|
|
|
![]() |
kuzulis |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
Законнектиться к сигналу QIODevice::bytesWritten(qint64).
Но если быть точным, то эта штука работает в Qt-шных сокетах некорректно, ИМХО (а может оно так и планиорвалось..). Суть в том, что bytesWritten() излучается после успешного write(). Но это неправильно, т.к. сокеты в Qt неблокирующие, поэтому вызов write() гарантирует только факт передачи массива данных из юзер-спейса в ядро (FIFO драйвера). Таким образом реально данные могут быть еще не переданы (например, когда их очень много), но bytesWritten() уже излучится. Поэтому - никак без костылей, ИМХО. |
|
|
call_me_Frank |
![]()
Сообщение
#3
|
![]() Студент ![]() Группа: Участник Сообщений: 73 Регистрация: 20.10.2010 Пользователь №: 2129 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
окей, ясно...но поскольку интерес направлен именно в сторону количества переданных данных по сети, а не в буффер, то не могу не спросить насчет костылей - какие есть варианты получить достоверные и своевременные данные?
|
|
|
kuzulis |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
ИМХО, никак. Не юзать Qt-шные сокеты.
Или перевести открытый сокет из неблокирующего режима в блокирующий (через setSockOptions(), или через платформо-зависимые ioctl()). И тогда придется этот сокет использовать в отдельном потоке потому что write() будет блокирующим. Тогда bytesWritten() будет корректно излучаться.. Как то так.. В теории. ![]() |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 3.6.2025, 15:11 |