• XSS.stack #1 – первый литературный журнал от юзеров форума

Perl сервер не выводит все данные

Quake3

TPU unit
Забанен
Регистрация
03.11.2010
Сообщения
4 529
Решения
4
Реакции
5 305
Депозит
0.046
Пожалуйста, обратите внимание, что пользователь заблокирован
Есть код простого сервера на Perl , который принимает данные от клиента. Но - если строка не завершается \r\n - он ее не выводит. Почему так и как исправить?
Код:
#perl tcp server
use Socket;

$port = shift;
$port = getservbyname($port,'tcp') if $port =~ /\D/;
	die "Invalid port" unless $port;
socket(S,PF_INET,SOCK_STREAM,0) || die "socket: $!";
bind(S,sockaddr_in($port,INADDR_ANY)) or die ("bind $!");
listen(S,SOMAXCONN);
for (; accept(S1,S); close(S1))
{
while(TRUE)
	{
	defined(recv(S1,$line,120,0)) or die("recv: $!");
	last if length($line) == 0;
	print $line;	
	}
}
 
Quake3
Буферизация, сэр. Он складывает вывод в буфер до тех пор, пока там не встретится символ перевода строки. Например:
$ perl -e 'print "test"; sleep 5;'
Не выведет ничего, пока не пройдет 5 секунд.
$ perl -e 'print "test\n"; sleep 5;'
Выведет строку сразу.
Если вкратце - добавь в начало скрипта $|=1; если длинно, то смотри по ссылкам
http://perl.plover.com/FAQs/Buffering.html
http://www.perlhowto.com/disable_output_buffering
и т.п.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх