我有一个服务器 - 客户端程序。 我希望我的服务器检测我的一个客户端是否断开连接(拔掉客户端电缆)并从其列表中删除该客户端。 我使用了这段代码(在Linux上工作):在QThread中:
m_sock = new QTcpSocket();
m_sock->setDescription(ds);
int enableKeepAlive = 1;
int fd = m_sock->socketDescriptor();
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &enableKeepAlive, sizeof(enableKeepAlive));
int maxIdle = 10; /* seconds */
setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &maxIdle, sizeof(maxIdle));
int count = 3; // send up to 3 keepalive packets out, then disconnect if no response
setsockopt(fd, SOL_TCP, TCP_KEEPCNT, &count, sizeof(count));
int interval = 2; // send a keepalive packet out every 2 seconds (after the 5 second idle period)
setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, &interval, sizeof(interval));
当我断开网络电缆时,它在客户端上工作(出现超时错误)。但是在服务器端没有任何反应(我为两者使用了相同的代码)。