int n = 0;
if ( 0 != getsockopt(iSockFd,SOL_SOCKET,SO_RCVBUF, &n, sizeof(n)))
{
printf("Get socket option failed, errno: %d\n",errno);
}
else
{
printf("Current socket buff len = %d\n", n);
}
n = 225280;
if(0 != setsockopt(iSockFd, SOL_SOCKET, SO_RCVBUF, (const void *)&n, sizeof(n)))
{
printf("setsock err errno %d\n", errno);
}
else
{
printf("setsock opt success\n");
}
n = 0;
if ( 0 != getsockopt(iSockFd,SOL_SOCKET,SO_RCVBUF, &n, sizeof(n)))
{
printf("Get socket option failed, errno: %d\n",errno);
}
else
{
printf("After setting socket buff len = %d\n", n);
}
输出是-
当前插座浅黄色len = 41600
套索选择成功
设置套筒抛光后,len = 41600。
看起来接收缓冲区的大小没有增加,为什么会这样?
提前致谢!
如果内核是较新的版本(2.6.17或更高版本),请通过验证文件/ proc / sys / net / ipv4 / tcp_moderate_rcvbuf来检查是否启用了自动调整。如果tcp_moderate_rcvbuf的值为1,则启用自动调整。在这种情况下,接收缓冲区将由内核动态更新,并绑定到/ proc / sys / net / ipv4 / tcp_rmem中的值。检查是否达到此限制。
如果内核是旧版本,请检查SO_RCVBUF是否受/ proc / sys / net / core / rmem_default和/ proc / sys / net / core / rmem_max中的值限制。如果是TCP,还请检查/ proc / sys / net / ipv4 / tcp_rmem的值
另请注意,“使用setsockopt()手动调整套接字缓冲区大小会禁用自动调整”。这是有关调整Linux的好链接http://www.psc.edu/index.php/networking/641-tcp-tune
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句