我正在研究一些套接字代码,无法弄清楚为什么在socket上使用autoflush.就是这样的
my $sock = IO::Socket::Unix(Peer => $socketfilename,Type => SOCK_STREAM) autoflush $sock 1;
还有一些地方
autoflush STDERR 1 autoflush STDOUT 1
对于一般filehnadles.
它有什么作用?如果我不使用它会发生或将会发生什么?请举一些实际的例子,以便我理解而不是简单的定义.
解决方法
数据通常不会立即在套接字上发送,它会被缓冲到某个点,然后一次性发送.
自动刷新意味着数据直接通过缓冲区然后刷新,而不是保留在缓冲区中等待其他数据到达和累积.
就如此容易.
没有自动刷新:
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个字符>非常简单的例子,你可能会在看到它之后提出一些其他问题 – 其中很大一部分也是依赖于实现的.此外,缓冲可以发生在各个级别(发送者,接收者,应用程序等).