c - write() 和 TCP/IP 开销

标签 c sockets tcp unistd.h

如果我使用 write() 逐字节写入套接字文件描述符,

  • 现在每个字节都是一个数据包吗?
  • 套接字是否会为每个字节添加 TCP/IP header ?
  • 或者它是否有缓冲机制(我个人对此表示怀疑,因为我没有显式刷新)。

例如:

write(fd, 'a', 1);
write(fd, 'b', 1);
write(fd, 'c', 1);

这会比说的效率低

write (fd, 'abc', 3);
  • 我必须在这里问这个问题,因为我没有监控流量中 TCP/IP header 的专业知识。谢谢。

最佳答案

不,并不是每个字节都会成为一个数据包。有些可能由于内格尔算法和其他原因而合并。每个数据包将有一个 TCP header ,而不是每个字节。

也就是说,您应该避免逐字节调用 write/send,因为每个都是一个系统调用,这是昂贵的(在本地计算机上,而不是就它如何在网络上结束而言)。

关于c - write() 和 TCP/IP 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988358/

相关文章:

c - 如何从用户空间使用asm/system.h?

java - 使用 SAAJ 从 TCP 套接字流读取 SOAP 消息

java - 具有持久连接的 NioEventLoopGroup 的线程数

c# - 如何通过 GPRS 向 GPS 追踪器(TK103、GT02、GT06、TK102 等)发送命令

C 指向 Swift 指针的指针

c - 在 c 和 bash 之间传递值

c - 为什么gcc输出机器码有nop指令

ios - 按时从 GCDAsyncSocket 读取响应(iOS)

c - 是否有可能在c中同时运行主线程及其子线程

c++ - TCP Socket block 函数段错误,由移动 if 语句引起