Pregunta breve
¿Cuál es la forma correcta de manejar un evento Ctrl-C enviado a través de Telnet en el lado del servidor?Sockets POSIX: ¿Cómo detectar Ctrl-C enviado a través de Telnet?
pregunta larga
Después de llamar a recv() en un socket, me gustaría manejar algunas situaciones adecuadamente. Uno de ellos es devolver un cierto código de error cuando se recibió Ctrl-C. ¿Cuál es la forma correcta de detectar esto? Las siguientes obras, pero simplemente no parece correcto:
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;
}
me encontré con un comentario en Ctrl-C en una nota lateral en this UNIX Socket Preguntas:
[...] (por cierto, fuera de banda se usa a menudo para ese ctrl-C, también).
Según tengo entendido, la recepción de datos fuera de banda se realiza utilizando recv() con un determinado indicador como último parámetro. Pero cuando estoy esperando datos usando recv() como lo hago en el código anterior, no puedo leer datos fuera de banda al mismo tiempo. Aparte de eso, estoy obteniendo algo usando recv() sin esa oob-bandera.
Ctrl-D es enviado por telnet como^D (0x04) carácter –