我正在处理一些套接字代码,但无法弄清楚为什么会出现 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
关于perl - autoflush 在 socket 中有什么作用?我们为什么用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023957/