Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
当我使用send()并调用阻塞系统调用发送数据时flush(),刷新是否返回:
send()
flush()
收到相应的 TCP-ACK 后?
或者
数据通过网络发送后?
正如@caf 评论的那样,Linux 中没有flush系统调用。此外,Linux 中没有等待接收 TCP ACK 的机制。当您将send数据传输到网络时,它已进入内核的网络缓冲区,没有更多的保证可用。当内核接收并确认数据已进入远程主机上的接收窗口时,不再有可用的保证(严重的是,它可能尚未到达远程主机上的应用程序)。
flush
send
如果您希望确保通过 TCP 发送的数据的传递,那么您应该让接收方通过发送回复来确认应用层的数据。