Short Question
在服务器端通过Telnet发送Ctrl-C事件的正确方法是什么?POSIX套接字:如何检测通过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;
}
我发现一个侧面说明上按Ctrl-C评论中this Unix套接字FAQ:
[...] (顺便说一下,out-of-band通常也用于该ctrl-C)。
据我所知,使用带有特定标志的recv()作为最后一个参数来接收带外数据。但是,当我像使用上面的代码一样使用recv()等待数据时,我无法同时读取带外数据。除此之外,我得到东西使用recv()没有那个oob标志。
通过telnet发送Ctrl-D作为^ D(0x04)字符 – 2016-04-21 12:56:57