如果我使用 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/