Хеллоу евриуан!) Помогите пожалуйста с перл скриптом. Соединяюсь telnet'ом на 3000 порт, ввожу quit, а соединение не сбрасывается:
use IO::Socket::INET;
use threads;
use 5.010;
my $srv = IO::Socket::INET->new(LocalPort => 3000, Proto => 'tcp', Listen => 5,
Reuse => 1) or die $!;
while ($cli = $srv->accept()) {
threads->create(
sub {
while ($cli) {
$cli->recv($data, 1024);
$data =~ s/\v//g;
my ($cmd, $arg) = split ' ', $data;
given ($cmd) {
when ('..') { chdir ".." }
when ('ls') { my $ls = join ' ', (glob "./*");
$cli->send($ls . "\n"); }
when ('cd') { chdir $arg or $cli->send("$!\n") }
when ('md') { mkdir $arg or $cli->send("$!\n") }
when ('rmd') { rmdir $arg or $cli->send("$!\n") }
when ('quit') { $cli->close }
when ('halt') { exit }
default { $cli->send("Неизвестная команда\n")}
};
});
}
Вариант ruby работает отлично:
#-*- coding:utf-8 -*-
require 'socket'
server = TCPServer.new 3000
loop do
Thread.start(server.accept) { |cli|
while cli
cmd, arg = cli.gets.chomp.split " "
case cmd
when ".." then Dir.chdir ".." rescue cli.puts $!#"error"
when "ls" then cli.puts Dir.glob("./*").join ' '
when "cd" then Dir.chdir arg rescue cli.puts $!#"error"
when "md" then Dir.mkdir arg rescue cli.puts $!#"error"
when "rmd" then Dir.rmdir arg rescue cli.puts $!#"error"
when "quit!" then cli.close
when "halt!" then exit
else cli.puts "Неизвестная команда \n"
end
end
}
end