Один шаблон, который я нашел полезным во встроенных системах, состоит в том, чтобы иметь флаг ошибки для каждого потока, но при условии, что операция ввода-вывода, которая предпринимается при установке флага, немедленно завершится неудачей.Таким образом, код может сделать что-то вроде:
pkt_type = tcp_getbyte(my_stream, timeout);
pkt_length = tcp_getbyte(my_stream, timeout);
pkt_length |= tcp_getbyte(my_stream, timeout) << 8;
if (pkt_length < MAX_PACKET_LENGTH)
{
for (i=0; i<pkt_length; i++)
buffer[i] = tcp_getbyte(my_stream, timeout);
}
if (!my_stream->error)
{
/* Do something with packet */
}
Если одна попытка получить байт истекает, последующие попытки безуспешно завершатся неудачно, возвращая ноль.Нет необходимости проверять каждую операцию на наличие сбоев;если что-то пойдет не так, система будет вести себя примерно так, как если бы tcp_getbyte () выдал исключение, но не так быстро.