サーバー側にQTcpSocket :: KeepAliveOptionを設定して、しばらくの間ネットワーク接続が失われたときに接続が自動的に切断されるようにしたいと思います。サーバー側のQTcpSocket KeepAliveOption
しかし、ドキュメントは言う:ソケットが接続される前に、Windowsランタイム、QAbstractSocket :: KeepAliveOptionで
を設定する必要があります。
クライアントでは、ソケットを作成し、オプションを設定してから接続します。
サーバー側では、ソケットは作成されず、作成され、QTcpServer :: nextPendingConnection()を購入して返されます。これらはすでに接続されています。
私は基本的に固執していますし、 "ハートビート"を自分で実装する唯一の実行可能なオプションですか?
EDIT
の着信接続ソケットにフラグを設定するためのtalamakiにより示唆されるように、私はQTcpServerサブクラスを作成しました。そして、
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
を設定しています30000(30秒)のDWORD値
システムを再起動してシステムで使用されていることを確認してください
しかし、リモートクライアントのイーサネットケーブルを外した後も数分後に信号が切断されることはありません。
KeepAlive機能を動作させるにはどうすればいいですか?
おかげ