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