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

Вопросы по Perl

Пожалуйста, обратите внимание, что пользователь заблокирован
Для теста нужно простейшее подобие веб-сервера. Т.е. чтобы с браузера перейти на определенный порт, и там скрипт вывел контент. Написал такой код:

Код:
#Perl
use warnings;
use strict;
use Socket;
use LWP::UserAgent;
 
my $ua = LWP::UserAgent->new(agent=>"Perl browser");
my $content = $ua->get("http://kuraev.ru/smf/")->content;
 
my $port = 3000;
$port = getservbyname($port,'tcp') if $port =~ /\D/;
        die "Invalid port" unless $port;
socket(S,PF_INET,SOCK_STREAM,0) || die "socket: $!";
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,pack('l',1)) || die "setsockopt: $!";
bind(S,sockaddr_in($port,INADDR_ANY)) or die ("bind $!");
listen(S,SOMAXCONN);
for (; accept(S1,S); close(S1))
{
while(1)
        {
        print S1 $content;
        #last;
        }
}

Проблема в том, что он выводит контент бесконечно, а если дописать last или вообще убрать цикл while, то не выводит ничего. Почему так (интересует почему не выводит).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Frought
Спасибо, второй раз на этой буферизации лоханулся. Но зачем select(STDOUT);, если я вывожу данные в сокет (S1)?
 
Frought Спасибо, второй раз на этой буферизации лоханулся. Но зачем select(STDOUT);, если я вывожу данные в сокет (S1)?

Всё правильно, S1, это я из-за усталости не обратил внимание на дескриптор.
 


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