Короткий вопрос
Как правильно обрабатывать событие Ctrl-C, отправляемое через Telnet на стороне сервера?
Длинный вопрос
После вызова recv () для сокета я бы хотел обработать некоторые ситуации соответствующим образом. Один из них - вернуть определенный код ошибки при получении Ctrl-C. Какой правильный способ обнаружить это? Следующее работает, но это не кажется правильным:
size_t recv_count;
static char ctrl_c[5] = {0xff, 0xf4, 0xff, 0xfd, 0x06};
recv_count = recv(socket, buffer, buffer_size, 0);
if (recv_count == sizeof(ctrl_c) &&
memcmp(buffer, ctrl_c, sizeof(ctrl_c) == 0)
{
return CTRL_C_RECEIVED;
}
Я нашел комментарий к Ctrl-C в примечании в этом FAQ по сокету UNIX:
[...] (кстати, внеполосное часто используется и для этого ctrl-C).
Как я понимаю, получение внеполосных данных осуществляется с использованием recv () с определенным флагом в качестве последнего параметра. Но когда я жду данных с использованием recv (), как в приведенном выше коде, я не могу одновременно читать внеполосные данные. Кроме того, я получаю что-то , используя recv () без этого флага oob.