我正在编写一个尝试使用 QTcpSocket 连接到对等点的 linux Qt5/c++ 应用程序。我打电话
tcpsocket->connectToHost(address,port,options)
当对等点可用时,它运行良好并立即连接。但是,当对等方不可用时:我第一次调用上述方法时,连接等待 1 分钟,然后我收到 SocketTimeoutError (5)。然后,每个后续的连接调用可能会在我收到 ConnectionRefusedError (0) 之前等待一秒钟,或者可能等待整整一分钟(取决于测试的系统)。
我可以使用 setsockopt 来减少等待初始连接的时间吗?
我应该指出,我已经设置了一些套接字选项,以便快速通知我连接丢失(见下文)。希望这些不会导致 1 分钟的初始连接错误延迟:
int enableKeepAlive = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &enableKeepAlive, sizeof(enableKeepAlive));
int maxIdle = 5; /* 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));