Я уже знаю, что невозможно просто определить, отключен ли сокет или нет - сервер и клиенты должны кричать «Вы меня слышите?» и «Да, я могу . "так же, как мы делаем на skype.
Но когда 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 сервер, я знаю, когда клиент отключается - исключение вызывается при любой попытке чтения/записи.
Вы пытались разместить try & catch блоки? –
Сделал, но я не знаю, как называется имя типа исключения, поэтому я не знаю, что помещать в 'catch()' как paramater. Мне не удалось найти это в документах, и IDE не дает мне никаких намеков. –
@ TomášZato все разумные библиотеки должны получать свои исключения из 'std :: exception' - даже если я фактически не использую boost, я считаю, что достаточно разумно соблюдать это соглашение. И в любом случае руководство по эксплуатации должно иметь точный ответ. ;) В худшем случае ваш отладчик должен указать вам тип исключения. – syam