C代码中引用的缓冲区之间有什么区别
recvfrom(sock, buffer, 20, 0, (struct sockaddr *)&c_addr, &addr_size);
可以通过设置套接字选项来调整其大小的缓冲区(在C中,但我认为其他编程语言具有相同的套接字选项)?
我的困惑来自recvfrom代码中称为“缓冲区”的缓冲区,可以合理地称为接收缓冲区,它也是TCP中使用的缓冲区的名称 . 我想澄清一下,recvfrom代码中提到的缓冲区是一种不同的缓冲区,也许差别是什么 .
假设它们是不同的,就5层网络模型而言,第二类缓冲区基本上只适用于传输层,并且通常不可修改(除了能够在应用层更改其常规属性,如大小)?换句话说,TCP接收缓冲区中的数据是否被传递到recvfrom代码中名为“buffer”的缓冲区?
1 回答
您所指的接收缓冲区是OS中的内部缓冲区,其中在用户空间程序通过
recv
或recvfrom
函数调用访问它之前存储传入数据 .这与上面代码中的
buffer
不同,因为它是一个应用程序缓冲区 .如果应用程序没有比操作系统接收数据包更快地读取数据包,则操作系统中的接收缓冲区将会满,并且数据包将被丢弃 .