Мне достался по наследству вот такой код для сервера:
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