TcpSocket 禁止Nagle算法

概 述

我们在建立使用Tcp Socket时,会遇到当发送数据较小时,响应超时,或者对端发送频率越慢,相应越慢;发送频率越快,相应越快的情况。这可能时Nagle算法对socket的影响。

Nagle算法

Nagle算法在未确认数据发送时会将数据放到缓存中。直到得到明显的数据确认或者直到攒到了一定数量的数据后再发包。该算法是自适应的,即确认到达的越快,数据也就发送的越快;在希望减少微小分组数目的低速广域网上,会发送更少的分组。
具体有关此算法的原理和实现,这里不再赘述。大家可百度学习。

关闭 Nagle算法

Linux C++
使用setsockopt(),函数返回-1表示失败,反正成功

#include <netinet/tcp.h> //TCP_NODELAY

socket_fd = socket(AF_INET, SOCK_STREAM, 0); //建立的socket套接字

int on = 1;
int result = setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(int));
if (result == -1) {
    cout << "Close Nagle error" << endl;
}

Qt
使用setSocketOption()

//m_socket 为 QTcpSocket
m_socket->setSocketOption(QAbstractSocket::LowDelayOption, 1);

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值