c - 套接字和缓冲区

标签 c sockets

我知道标准 c 库函数 fwrite 和 fread 是写入和读取系统调用的排序缓冲包装器,我完全理解出于性能原因使用缓冲区。 我不明白的是缓冲区在套接字编程函数写入和读取中的作用。 你能帮我理解它们的用途,突出显示与文件缓冲区的异同吗?

我是套接字编程的新手...

最佳答案

当内核接收到数据包时,它必须将这些数据放在某个地方。它将它存储在缓冲区中。当您的应用进行下一次读取时,它可以从这些缓冲区中获取数据。如果你有一个 UDP 连接并且你的应用程序没有读取这些缓冲区,它就会变满并且内核开始丢弃接收到的数据包。如果您有 TCP 连接,只要缓冲区中有可用空间,它就会确认数据包,但之后它会发出无法读取更多信息的信号。

写缓冲区是必要的,因为网络接口(interface)是一种稀缺资源,内核通常不能立即发送数据包。如果你做一个大的 write() 它可以被切碎成数百个数据包。所以内核会将数据存储在缓冲区中。如果您进行大量小写操作,缓冲区也能很好地完成工作,请参阅 Nagle's algorithm .

关于c - 套接字和缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704277/

相关文章:

Linux Socket编程 : what happen in server socket when client socket gone off in the middle of communication

c - C 中的信号处理

c - 从文件中的数据获取结构变量

c - fork : child does not execute code

Python:无法使用 SSL 套接字发出 HTTPS 请求

PHP 自定义 SMTP 邮件函数返回错误 fputs 发送字节失败 errno=32 Broken pipe

c - ANTLR 3.4(C 运行时)中的 antlr3NewAsciiStringCopyStream 发生了什么?

c - Fork() 工作不正确,返回 3 次

c# - Java 相当于 C# Stream.BeginRead() 和 AsyncResult?

python /套接字 : How to send a file to another computer which is on a different network?