代码之家  ›  专栏  ›  技术社区  ›  Ames ISU

套接字缓冲区在Linux中是如何工作的?

  •  0
  • Ames ISU  · 技术社区  · 11 月前

    我使用的是python TCP服务器,客户端只会通过套接字将数据发送到服务器。在Linux中,有为TCP定义的缓冲区大小。那么,这是否意味着当客户端写入套接字时,数据将被缓冲并直接返回true?这意味着我们真的不知道数据是否会到达服务器。这是正确的吗?

    如果是这样的话,在Linux中禁用缓冲是一个好的做法吗?如果它被禁用,会导致什么问题?谢谢

    1 回复  |  直到 11 月前
        1
  •  0
  •   Remy Lebeau    11 月前

    在Linux中,有为TCP定义的缓冲区大小

    每个平台都这样做。

    那么,这是否意味着当客户端写入套接字时,数据将被缓冲并直接返回true?这意味着我们真的不知道数据是否会到达服务器。这是正确的吗?

    是的,是的。知道数据是否真的到达服务器的唯一方法是让服务器向客户端发送回复,并让客户端接收和处理该回复。

    如果是这样的话,在Linux中禁用缓冲是一个好的做法吗?

    不,而且无论如何都不能禁用它,因为它是套接字与操作系统内核交互的核心。如果需要,您所能做的就是降低缓冲区大小(但即使这样,套接字也会强制执行其选择的最小大小)。此外,如果您需要在短时间内发送许多小数据包,您可以启用 TCP_NODELAY 选项,以避免在将缓冲区刷新到网络时出现不必要的延迟。