что надо, есть некая прога, консольная, которая не имеет сокетного интерфейса
для соединения через интернет.
Надо написать для неё оболочку, которая бы умела пробрасывать диалог
пользователя с программой через сокет, т.е. telnet 123.233.12.24 9000
и ты пишешь команды в прогу, и она тебе возвращает значение как будто
ты на консоли работаешь.
Короче я это дело написал на сабже, но толи уже 5 утра и лыжи не едут,
толи еще чего-то. Вобщем один раз оно логинится, но второй уже не
хочет. Походу я чего то где то уже не вижу. Это можно обойти
перезапуском сервера по отрубанию клента, но не хотелось бы. С зомбями
все вроде бы ок, но гдето там чето застревает.
#!/usr/bin/perl -w
use IPC::Open2;
use IO::Socket;
#use IPC::Shareable;
use strict;
my $PORT = 9000;
my ($pid1,$line,$server,$client);
$server = IO::Socket::INET->new( Proto => 'tcp',
LocalPort => $PORT,
Listen => SOMAXCONN,
Reuse => 1);
die "can't setup server $!" unless $server;
my $pid = open2(\*RD, \*WR, '/bin/bash') or die "cant open: $!\n";
while($client = $server->accept()){
$client->autoflush(1);
print "next client\n";
my ($byte,$c,$rr);
if ($pid1 = fork) {
while (sysread($client, $byte, 1) == 1) {
$c=1 if $byte=~m!.!sm;
$rr.=$byte if $c==1;
do{
$c=0; $rr=~s!(.*)[\r|\n|\cM|\cJ]$!$1\n!;
print $rr; #print "\\r" if $rr=~m!\n$!sm;
print WR $rr if $rr ne '';
$rr='';
} if $byte=~m![\r\cM\cJ\n]!sm;
}
close $client;
waitpid($pid1,0);
} else {
die "cannot fork: $!" unless defined $pid;
while(<RD>){
print $client "$_";
}
}
close $client;
}
/bin/bash сюда вставлен просто для удобства отладки. конешно я
понимаю, что это мегадырища в безопастности и т.п. Т.е. на самом
деле там конешно будет /bin/my_cool_program
Спасибо за ответ!

Ответ на:
комментарий
от polachok

Ответ на:
комментарий
от phoenix

Ответ на:
комментарий
от vilfred

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от vilfred
Ответ на:
комментарий
от vilfred
Ответ на:
комментарий
от anonymous

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум perl, IPC & socket - чего тут не так? (2006)
- Форум perl обработка stdout and stdin сторонней проги (2006)
- Форум Perl & win32 (2005)
- Форум Perl: проблема совместимости «use Socket;» (2004)
- Форум Задание на Stepik по Perl. Никак не могу понять, где загвоздка. HELP. (2020)
- Форум Perl. Сокеты. (2007)
- Форум [perl] прога плодит зомби (2008)
- Форум troubles with perl & tcp sockets (2006)
- Форум Perl + FastCGI + nginx (2009)
- Форум клиент и сервер на Перл (2009)