пишу
$sock = new IO::Socket::INET (PeerAddr => "$pop3",
PeerPort => 110,
Proto => 'tcp',
);print $SOCK "USER myuser\r\n";
while ( $so=<$sock> ){
print "$so\n";
}
print $sock "pass my_secret_password\r\n";
while ($so=<$sock>){
print "$so\n";
}
print $sock "list\r\n";
while ($so=<$sock>){
print "$so\n";
}получается что-то вроде вечных циклов, а напрямую телнетом все работает!
научите как правильно. Просьба использование модулей типа ВСЁ_РАБОТАЕТ.pm не предлагать.
Спасибо.
>пишу
> $sock = new IO::Socket::INET (PeerAddr => "$pop3",
> PeerPort => 110,
> Proto => 'tcp',
>
>
> );
>
> print $SOCK "USER myuser\r\n";
> while ( $so=<$sock> ){
> print "$so\n";
> }
> print $sock "pass my_secret_password\r\n";
> while ($so=<$sock>){
> print "$so\n";
> }
> print $sock "list\r\n";
> while ($so=<$sock>){
> print "$so\n";
> }
>
>получается что-то вроде вечных циклов, а напрямую телнетом все работает!
>научите как правильно. Просьба использование модулей типа ВСЁ_РАБОТАЕТ.pm не предлагать.
>Спасибо.@answer = <$sock>;
так не пойдет?
А чего ты ожидал ? Программа останавливает на первом же цикле, потому как ты ждешь, пока сервер тебе чего-то зашлет, а тем временем сервер ждет, пока ты ему чего-то зашлешь. То есть, ошибка алгоритмическая. В цикле ты должен анализировать, что сказал тебе сервер и реагироывать соответственно. Вернулась от сервера строка с подтверждением логина и запросом пароля - дать пароль. И т.д.
Живой пример:print $sock "USER username\n";
print $sock "PASS password\n";
print $sock "LIST\n";
while (<$sock>) {
s/\r|\n//;
print "$_\n";
last if ($_ eq '.');
};Тоже работает без анализа. Только одна проверка - точка в конце списка. После чего - выход.