如何设置QTcpSocket心跳间隔?

How to set QTcpSocket heartbeat interval?

我注意到 Qt QTcpSocket setSocketOption(QTcpSocket.KeepAliveOption, 1) 可以使两个连接保持活动状态,但我不知道如何设置 KeepAlive 间隔? ç

在python中可以简单的做到这一点sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000)),那么Qt中有这样的简单方法吗?

您可以使用 QTcpSocket 文件描述符创建一个 python 套接字对象,以便能够使用所需的方法:

import socket
import sys

from PyQt5.QtCore import QCoreApplication
from PyQt5.QtNetwork import QAbstractSocket, QTcpSocket


def main():
    app = QCoreApplication([])

    qtcpsocket = QTcpSocket()

    def handle_connected():
        print("CONNECTED")
        if (
            sys.platform == "win32"
            and qtcpsocket.state() != QAbstractSocket.SocketState.UnconnectedState
        ):
            fd = int(qtcpsocket.socketDescriptor())
            print(fd)
            pysocket = socket.socket(fileno=fd)
            pysocket.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))

        QCoreApplication.quit()

    qtcpsocket.connected.connect(handle_connected)
    qtcpsocket.connectToHost("google.com", 80)

    app.exec_()


if __name__ == "__main__":
    main()

注意:方法QTcpSocket::socketDescriptor()返回的文件描述符在连接处于活动状态时有效。