gpt4 book ai didi

perl - autoflush 在 socket 中有什么作用?我们为什么用它?

转载 作者:行者123 更新时间:2023-12-04 16:27:39 24 4
gpt4 key购买 nike

我正在处理一些套接字代码,但无法弄清楚为什么会出现 autoflush用在 socket 上。它是这样的

my $sock = IO::Socket::Unix(Peer => $socketfilename , Type => SOCK_STREAM)

autoflush $sock 1;

还有一些地方
autoflush STDERR 1

autoflush STDOUT 1

用于一般文件处理。

它有什么作用?如果我不使用它,会发生什么或会发生什么?请举一些实际的例子,以便我理解而不是简单的定义。

最佳答案

数据通常不会立即在套接字上发送,它会被缓冲到某个点,然后一次性发送。

自动刷新意味着数据直接通过缓冲区然后刷新,而不是保留在缓冲区中等待其他数据到达并累积。

就如此容易。

没有自动冲洗:

Tick | DATA sent|Socket Buffer| DATA received
.....|..........|.............|..............
1 | XX | XX | (nothing)
2 | yy | yyXX | (nothing)
3 | ZZZ | ZZZyyXX | (nothing)
4 | t | (empty) | tZZZyyXX

带自动冲洗:
Tick | DATA sent | Socket Buffer | DATA received
.....|...........|...............|..............
1 | XX | () | XX
2 | yy | () | yy
3 | ZZZ | () | ZZZ
4 | t | () | t
  • 套接字缓冲区大小:8 个字符
  • 很简单的例子,你看到之后可能会提出一些其他的问题——其中很大一部分也是依赖于实现的。此外,缓冲可能发生在各个级别(发送方、接收方、应用程序等)
  • 关于perl - autoflush 在 socket 中有什么作用?我们为什么用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023957/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com