我知道标准 c 库函数 fwrite 和 fread 是写入和读取系统调用的排序缓冲包装器,我完全理解出于性能原因使用缓冲区。 我不明白的是缓冲区在套接字编程函数写入和读取中的作用。 你能帮我理解它们的用途,突出显示与文件缓冲区的异同吗?
我是套接字编程的新手...
最佳答案
当内核接收到数据包时,它必须将这些数据放在某个地方。它将它存储在缓冲区中。当您的应用进行下一次读取时,它可以从这些缓冲区中获取数据。如果你有一个 UDP 连接并且你的应用程序没有读取这些缓冲区,它就会变满并且内核开始丢弃接收到的数据包。如果您有 TCP 连接,只要缓冲区中有可用空间,它就会确认数据包,但之后它会发出无法读取更多信息的信号。
写缓冲区是必要的,因为网络接口(interface)是一种稀缺资源,内核通常不能立即发送数据包。如果你做一个大的 write() 它可以被切碎成数百个数据包。所以内核会将数据存储在缓冲区中。如果您进行大量小写操作,缓冲区也能很好地完成工作,请参阅 Nagle's algorithm .
关于c - 套接字和缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704277/