Необработанное исключение при чтении из не подключенного сокета

Я уже знаю, что невозможно просто определить, отключен ли сокет или нет — сервер и клиенты должны кричать «Ты меня слышишь?» а также «Да, я могу.«так же, как мы делаем на .
Но когда boost::asio розетка отключена с другой стороны получаю Неизвестное исключение при попытке чтения из сокета. Это своего рода обнаружение отключения достаточно полезно для меня. Могу ли я обработать это исключение, чтобы вместо сбоя программа выдала сообщение в консоли?
Немного кода для тех, кому это нужно для всего:

bool SocketClient::read(int bytes, char *text) {
char buffer = 0;
int length = 0;
while(bytes>0) {
size_t len = sock.receive(boost::asio::buffer(&buffer, 1));  //boom: UNHANDLED EXCEPTION
bytes--;
text[length] = buffer;
length++;

}
return true;
}

Поскольку я подключаюсь к серверу Minecraft, я знаю, когда клиент отключен — исключение вызывается при любой попытке чтения / записи.

-1

Решение

try
{
size_t len = sock.receive(boost::asio::buffer(&buffer, 1));  //boom: UNHANDLED EXCEPTION
// More code ...
}
catch (const boost::system::system_error& ex)
{
if ( ex.code() == boost::asio::error::eof )
{
// Work your magic (console logging, retry , bailout etc.)
}
}

Пожалуйста, также посмотрите на доктор. В худшем случае вы можете определить тип исключения из отладчика 🙂

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]