возвращаемое значение QTcpSocket :: write (QByteArray & buf); - PullRequest
2 голосов
/ 14 апреля 2011

Доза, эта функция всегда возвращает buf.size () или -1?если нет, то доза означает, что мне нужно вызвать функцию записи левых данных, которые не будут записаны?

например, если у меня есть 100 байтов QByteBuffer.когда я вызываю "tcpSocket.write (buf_100_bytes)", возможно ли, что я получу 60 или что-то еще?

Кроме того, доза эта функция немедленно возвращается?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Как и в POSIX write (), QIODevice :: write () возвращает количество записанных байтов.Это может быть любое число от 0 до размера буфера.Кроме того, в случае ошибки он может вернуть отрицательное число, которое вы должны проверить отдельно.QIODevice :: write () не блокирует сокеты (они установлены в неблокирующий режим), байты просто добавляются в буфер и записываются позже.Чтобы получить уведомление при записи байтов, вы можете подключиться к сигналу bytesWritten (qint64).Чтобы блокировать, пока байты фактически не записаны, вы можете использовать waitForBytesWritten () (обычно это не очень хорошая идея в потоке main / UI).

0 голосов
/ 29 января 2012

Я цитирую документацию Qt:

Записывает не более maxSize байтов данных из данных на устройство.Возвращает количество фактически записанных байтов или -1, если произошла ошибка.

Это означает, что будет возвращено количество записанных байтов или -1 в случае ошибки.Вы можете получить ошибку, вызвав метод error () или подключившись к сигналу error ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...