TCP_CORK

4 篇文章 0 订阅
TCP_CORK:
setsockopt(fd, IPPROTO_TCP, TCP_CORK, (char *) &enable, sizeof(enable))


没有set前:
00:17:26.951501 IP 192.168.1.108.50403 > 192.168.1.109.http: Flags [S], seq 978655012, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
00:17:26.951553 IP 192.168.1.109.http > 192.168.1.108.50403: Flags [S.], seq 3894567125, ack 978655013, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:17:26.951783 IP 192.168.1.108.50403 > 192.168.1.109.http: Flags [.], ack 1, win 4380, length 0
00:17:26.952878 IP 192.168.1.108.50403 > 192.168.1.109.http: Flags [P.], seq 1:78, ack 1, win 4380, length 77
00:17:26.952899 IP 192.168.1.109.http > 192.168.1.108.50403: Flags [.], ack 78, win 229, length 0
00:17:27.695260 IP 192.168.1.109.http > 192.168.1.108.50403: Flags [P.], seq 1:332, ack 78, win 229, length 331
00:17:27.695664 IP 192.168.1.109.http > 192.168.1.108.50403: Flags [F.], seq 332, ack 78, win 229, length 0
00:17:27.696322 IP 192.168.1.108.50403 > 192.168.1.109.http: Flags [.], ack 333, win 4297, length 0
00:17:27.696934 IP 192.168.1.108.50403 > 192.168.1.109.http: Flags [F.], seq 78, ack 333, win 4297, length 0
00:17:27.696966 IP 192.168.1.109.http > 192.168.1.108.50403: Flags [.], ack 79, win 229, length 0


设置之后:
00:40:10.365009 IP 192.168.1.108.50459 > 192.168.1.109.http: Flags [S], seq 2391285363, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
00:40:10.365066 IP 192.168.1.109.http > 192.168.1.108.50459: Flags [S.], seq 1750167226, ack 2391285364, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:40:10.365424 IP 192.168.1.108.50459 > 192.168.1.109.http: Flags [.], ack 1, win 4380, length 0
00:40:10.365492 IP 192.168.1.108.50459 > 192.168.1.109.http: Flags [P.], seq 1:78, ack 1, win 4380, length 77
00:40:10.365508 IP 192.168.1.109.http > 192.168.1.108.50459: Flags [.], ack 78, win 229, length 0
00:40:10.540881 IP 192.168.1.109.http > 192.168.1.108.50459: Flags [FP.], seq 1:332, ack 78, win 229, length 331
00:40:10.541426 IP 192.168.1.108.50459 > 192.168.1.109.http: Flags [.], ack 333, win 4297, length 0
00:40:10.541975 IP 192.168.1.108.50459 > 192.168.1.109.http: Flags [F.], seq 78, ack 333, win 4297, length 0
00:40:10.541986 IP 192.168.1.109.http > 192.168.1.108.50459: Flags [.], ack 79, win 229, length 0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Qt 中可以使用 QTcpSocket 类来实现 TCP 断开重连的功能。具体实现步骤如下: 1. 创建一个 QTcpSocket 对象。 ``` QTcpSocket *socket = new QTcpSocket(this); ``` 2. 连接服务器。 ``` socket->connectToHost(host, port); ``` 3. 在连接成功的槽函数中,设置一些连接参数,如超时时间和重连次数等。 ``` void connected() { socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1); socket->setSocketOption(QAbstractSocket::LowDelayOption, 1); socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 1024 * 1024); socket->setSocketOption(QAbstractSocket::SendBufferSizeSocketOption, 1024 * 1024); socket->setSocketOption(QAbstractSocket::SocketOption(0x00030000), 1); // TCP_NODELAY socket->setSocketOption(QAbstractSocket::SocketOption(0x00040000), 1); // TCP_CORK socket->setSocketOption(QAbstractSocket::SocketOption(0x00080000), 1); // TCP_QUICKACK connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(disconnected()), this, SLOT(onDisconnected())); m_reconnectCount = 0; } ``` 4. 在断开连接的槽函数中,根据需要进行重连操作。 ``` void onDisconnected() { if (m_reconnectCount < m_maxReconnectCount) { ++m_reconnectCount; QTimer::singleShot(m_reconnectInterval, this, SLOT(reconnect())); } else { qDebug() << "Maximum retry count reached"; } } void reconnect() { qDebug() << "Reconnecting..."; socket->connectToHost(host, port); } ``` 5. 在错误处理的槽函数中,如果是连接超时等错误,也可以进行重连操作。 ``` void onError(QAbstractSocket::SocketError error) { if (error == QAbstractSocket::ConnectionRefusedError || error == QAbstractSocket::RemoteHostClosedError || error == QAbstractSocket::SocketTimeoutError) { if (m_reconnectCount < m_maxReconnectCount) { ++m_reconnectCount; QTimer::singleShot(m_reconnectInterval, this, SLOT(reconnect())); } else { qDebug() << "Maximum retry count reached"; } } else { qDebug() << "Socket error:" << error; } } ``` 注意:在进行重连操作时,需要考虑一些细节问题,如重连次数、重连间隔等。此外,如果重连过程中发现了一些错误,也需要及时处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值