linux内核中socket读取和接收的缓冲区大小
1、socket内核缓冲区大小可用getsockopt获取 2、socket内核缓冲区大小可用setsockopt设置,缓冲区的大小为设置的值的2倍,具体设置代码入下 3、socket缓冲区设置最大为多大呢? 接收缓冲区最大为:/proc/sys/net/core/rmem_max 接收缓冲区大小默认为:/proc/sys/net/core/rmem_default
问题(望大神回答): 1、发送缓冲区大小最大值跟默认值是多少呢? 2、为什么新创建的socket的接收缓存区的大小,跟/proc/sys/net/core/rmem_default中设置的值不一样呢? 3、内核中的socket缓冲区的大小,对于应用层编程有什么影响呢? 4、接收跟发送的缓冲区的大小多少合适呢?
#include
#include
#include
#include
#include
int main(void)
{
int socketFd;
if ((socketFd = socket(PF_INET, SOCK_STREAM,0)) < 0)
{
/* 获取socket发送和接收缓冲区的大小 */
optlen = sizeof(snd_size);
err = getsockopt(socketFd, SOL_SOCKET, SO_SNDBUF, &snd_size, &optlen);
if (err < 0)
{
printf("get send buff failed!\n");
}
optlen = sizeof(rcv_size);
err = getsockopt(socketFd, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);
if (err < 0)
{
printf("get rev buff failed!\n");
}
printf("senBuffLen:%d\n", snd_size);
printf("recBuffLen:%d\n", rcv_size);
/* 设置socket发送和接收缓冲区大小都为8K */
snd_size = 8*1024;
optlen = sizeof(rcv_size);
err = setsockopt(socketFd, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen);
if(err |