简短问题
如何在服务器端处理通过Telnet发送的Ctrl-C事件?
长问题
在对套接字调用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;
}
我在这个UNIX套接字FAQ的侧注中找到了一个关于Ctrl-C的评论:
据我所知,使用recv()并将特定标志作为最后一个参数来接收带外数据。但是当我像上面的代码一样使用recv()等待数据时,无法同时读取带外数据。除此之外,我使用没有oob标志的recv()仍然可以获得一些东西。[...](顺便说一下,out-of-band也经常用于ctrl-C)。