Qt服务器检测客户端断开连接

时间:2016-09-21 10:50:34

标签: linux qt sockets

我有一个服务器 - 客户端程序。 我希望我的服务器检测我的一个客户端是否断开连接(拔掉客户端电缆)并从其列表中删除该客户端。 我使用了这段代码(在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));

当我断开网络电缆时,它在客户端上工作(出现超时错误)。但是在服务器端没有任何反应(我为两者使用了相同的代码)。

0 个答案:

没有答案