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