【发布时间】:2012-09-12 02:32:50
【问题描述】:
当我使用send() 发送数据并调用阻塞系统调用flush() 时,是否刷新返回:
-
收到对应的TCP-ACK后?
或
-
数据通过网络发送后?
【问题讨论】:
-
Linux 中没有
flush()系统调用。
标签: tcp linux-kernel flush
当我使用send() 发送数据并调用阻塞系统调用flush() 时,是否刷新返回:
收到对应的TCP-ACK后?
或
数据通过网络发送后?
【问题讨论】:
flush() 系统调用。
标签: tcp linux-kernel flush
作为@caf cmets,Linux 中没有flush 系统调用。此外,Linux 中没有等待接收 TCP ACK 的机制。当您将send 数据发送到网络时,它已进入内核的网络缓冲区,不再有任何保证。当内核接收并确认数据已进入远程主机上的接收窗口时,不再有可用的保证(严重的是它可能没有到达远程主机上的应用程序)。
如果您希望确保传送通过 TCP 发送的数据,那么您应该让接收方通过发送回复来确认应用层的数据。
【讨论】: