обработка ошибок в boost::asio::ip::tcp::socket
От: Alex1000000  
Дата: 13.09.12 10:48
Оценка:
Мне достался по наследству вот такой код для сервера:
void TcpServer::handle_read(const boost::system::error_code& ec, std::size_t length){
if (!ec) {
//принимаем пакет
start_read();//перезапускаем чтение
} else {
if (ec == boost::asio::error::eof) {
//перезапускаем сокет
mIOSock.close(_ec);//boost::asio::ip::tcp::socket
if (mListenSock.is_open()){ //boost::asio::ip::tcp::acceptor
start_accept();
} else {
//ничего не делаем, просто плачем и пишем в лог
}
} else {
//тоже ничего не делаем, пишем в лог
}
}
}
Некоторое вермя все работало. Когда к серверу стали подключаться клиенты на .NET, пошли другие ошибки. Теперь условие выглядит так:
if ((ec == boost::asio::error::eof)|| //No such file or directory
(ec.value() == 104) || // Connection reset by peer
(ec.value() == 10054)) // An existing connection was forcibly closed by the remote host
Вопрос в том, как решить проблему радикально? Добавлять новый код ошибки в условие, когда от заказчика поступит жалоба — плохое решение.
Также посоветуйте, как правильно обработать ветви if под else.
Спасибо.
Re: обработка ошибок в boost::asio::ip::tcp::socket
От: savitar  
Дата: 16.09.12 19:49
Оценка: +2
Здравствуйте, Alex1000000, Вы писали:

зачем вообще проверять код ошибки? любая ошибка — до свидания, типа:
if (!ec)
{
    parse();
    read();
}
else
{
    close();
    postDelete();
}
Re[2]: обработка ошибок в boost::asio::ip::tcp::socket
От: Аноним  
Дата: 17.09.12 07:43
Оценка:
Здравствуйте, savitar, Вы писали:

S>зачем вообще проверять код ошибки? любая ошибка — до свидания, типа:


Я тоже так думаю, хотелось услышать мнение общественности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.