我想在服務器端設置QTcpSocket :: KeepAliveOption,以便在網絡連接丟失一段時間後連接會自動斷開連接。服務器端的QTcpSocket KeepAliveOption
然而,文件說:
在Windows上運行時,QAbstractSocket :: KeepAliveOption連接套接字之前必須設置。
在客戶端上,您只需創建套接字,設置選項,然後連接它。
在服務器端,您不創建套接字,它們被創建並返回,購買QTcpServer :: nextPendingConnection()。這些已經連接。
那麼我基本上堅持下去了,是我自己實施「心跳」的唯一可行方案嗎?
我已經創建了一個QTcpServer既可亞類由talamaki如建議用於設定標誌上的傳入連接插座
編輯:
class CustomTcpServer : public QTcpServer
{
Q_OBJECT
public:
CustomTcpServer(QObject * parent = 0) : QTcpServer(parent) { }
void incomingConnection(qintptr socketDescriptor)
{
QTcpSocket *socket = new QTcpSocket(this);
socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
socket->setSocketDescriptor(socketDescriptor);
addPendingConnection(socket);
}
};
然後,我已成立
\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\KeepAliveTime
要DWORD值爲30000(30秒)
並重新啓動系統以確保它被系統使用
但是,在拔下遠程客戶端的以太網電纜後,幾分鐘後仍然沒有斷開信號。
如何使KeepAlive功能正常工作?
感謝