Russian Qt Forum
Ноябрь 23, 2024, 11:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование кодов ошибок QTcpSocket::SocketError  (Прочитано 3470 раз)
Ruzzz
Гость
« : Ноябрь 01, 2009, 13:07 »

Хотел бы спросить ваше мнение. Для меня не понятен один момент. Создал класс сервера, в котором выполняю listen и в случае ошибки делаю emit onError(serverError(), errorString()), в «главный» класс. Заметил, что если порт занят, то получаем errorString = The bound address is already in use (serverError = 8, QAbstractSocket::AddressInUseError), что не совсем информативно. Далее посмотрел что в QtNetwork/qabstractsocket.h описанных ошибок (enum SocketError) не так много. Правильно ли я понимаю, что каждый код ошибки может быть общим для нескольких ситуаций? (Понимаю что можно порыться по коду, но мне пока не легко это дается). То есть передавая коды ошибок «на вверх», есть вероятность, что мы не сможем точно определить ситуацию в которой она произошла? Я не говорю участок кода Улыбающийся, а именно ситуация, понятно что многие ошибки могут быть в разных участках, это логично.

Допустим вполне возможно, что конкретная ошибка QAbstractSocket::AddressInUseError свойственна только listen (хотя это можно проверить простым поиском по файлам исходников, ну и конечно же я допускаю, что важны знания, которых у меня может не быть, чтобы логично определить такие ситуации), но вот посмотрев ее код в qtcpserver.cpp, я не обнаружил присвоения этой ошибки, похоже это делается где-то «в глубине» d->socketEngine. То есть появляется вопрос, а если этот d->socketEngine выполняется не только в listen? Это всего лишь пример, и разговор не конкретно об этой ошибке.

Еще один фактор, который сбивает с толку, это то что описание ошибки, нужно получать в тот же момент (ошибки) используя errorString. Почему нет общей «базы» ошибок для QtNetwork, чтобы в любой момент по коду получить ее описание? Что, для одного кода ошибки, может быть разное описание, в зависимости от ситуации?

Надеюсь смог объяснить суть не понимания Улыбающийся.

То есть как я понимаю, лучше ввести свои собственные коды ошибок, и «на вверх» передавать именно их?
Записан
Zmeishe
Гость
« Ответ #1 : Ноябрь 02, 2009, 10:59 »

Весьма маловероятно, что в Qt сама генерит ошибки при работе с сетью.
Скорее всего, Qt получает ошибки от API функций конкретной ОСи и по своему их интерпретирует.
Т.е. Qt имеет свой enum{...} с кодами ошибок, и получив состояние ошибки от API, Qt заменяет их на свои собственные согласно технической документации на конкретную ОСь.
Для Linux это может быть 2, для Windows может быть 4, а для Qt это serverError = 8.
Записан
Rcus
Гость
« Ответ #2 : Ноябрь 02, 2009, 12:05 »

Qt возвращает некоторые коды ошибок, но все равно для корректной обработки часто необходим контекст вызова, так что если ошибку нельзя обработать прямо в месте возникновения лучше обернуть ее в отдельный объект.
Что же до базы сообщений, то это невозможно по причине динамического формирования сообщений в некоторых местах (поиск :vimgrep /setError.*(.*arg(/ ~/qt-4.6.0-beta1-arm/src/**/*.cpp дает несколько результатов)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 21.