【问题标题】:Does system call flush() return before or after TCP ACK received?系统调用 flush() 在收到 TCP ACK 之前还是之后返回?
【发布时间】:2012-09-12 02:32:50
【问题描述】:

当我使用send() 发送数据并调用阻塞系统调用flush() 时,是否刷新返回:

  • 收到对应的TCP-ACK后?

  • 数据通过网络发送后?

【问题讨论】:

  • Linux 中没有flush() 系统调用。

标签: tcp linux-kernel flush


【解决方案1】:

作为@caf cmets,Linux 中没有flush 系统调用。此外,Linux 中没有等待接收 TCP ACK 的机制。当您将send 数据发送到网络时,它已进入内核的网络缓冲区,不再有任何保证。当内核接收并确认数据已进入远程主机上的接收窗口时,不再有可用的保证(严重的是它可能没有到达远程主机上的应用程序)。

如果您希望确保传送通过 TCP 发送的数据,那么您应该让接收方通过发送回复来确认应用层的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 2019-03-26
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多