欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法

发布时间:2023/12/4 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

TCP为了防止在网络中过多的小分组会导致阻塞,因此提供了Nagle算法:要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到来时以一个分组的方式发出去。Nagle算法会导致自己写的TCP程序中,小分组不能及时的发送出去。

现在我写了个基于TCP的socket程序,希望AP往client端发送1000个16字节的报文。结果发现client端接收到的报文并不是每次大小都是82字节(82字节是因为有66字节的TCP和IP头等,外加16字节我自己的数据),会出现大小为98字节的数据(98字节是因为有66字节的TCP和IP头等,外加两个16字节的自己的数据)。如下图所示:

这时就想起了关闭TCP中的Nagle算法。于是在我的TCP发送的Socket程序中加入如下代码(记得还要导入头文件: #include ):

/* Disable the Nagle (TCP No Delay) algorithm */

//sock_cli是自己定义的socket套接字

int flag = 1;

int ret = setsockopt( sock_cli, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) );

if (ret == -1) {

printf("Couldn‘t setsockopt(TCP_NODELAY)\n");

exit(-1);

}

重新编译并且运行,抓包后如下图所示:

可以发现不会在出现小分组等待的现象,说明关闭了Nagle算法。

总结

以上是生活随笔为你收集整理的在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。