|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey Gernichenko 2:5079/32.34 11 Apr 2001 16:43:03 To : All Subject : Сокеты и fork() --------------------------------------------------------------------------------
Помогите, плиз, разобраться... понять не могу... почему не работает
=== Hачало Windows Clipboard ===
#!/usr/bin/perl
use strict;
use IO::Socket;
my ($host, $port, $kidpid, $handle, $line);
unless (@ARGV == 2 ) {die "usage: $0 host port" }
($host, $port) = @ARGV;
$handle=IO::Socket::INET->new(Proto => "tcp",
PeerAddr => $host,
PeerPort => $port)
or die "can't connect to port $port on $host: $!";
$handle->autoflush(1); # и результат сразу же попадает туда
print STDERR "[Connected to $host:$port]\n";
#die "can't fork: $!" unless defined
$kidpid = fork();
print STDERR "Kidpid=$kidpid\n";
if($kidpid)
{
print STDERR "[I am parent]\n";
while (defined ($line = <$handle> )) { print STDOUT $line;}
print STDERR "[I am parent]:Sending kill Signal\n";
kill ("TERM",$kidpid); # послать в порожденный процесс сигнал SIGTERM
}
else
{
print STDERR "[I am son]\n";
while (defined ($line = <STDIN>)) { print $handle $line;}
}
=== Конец Windows Clipboard ===
В общем, это пример из книжки в эл. виде.
по идее это что-то вроде телнет клиента.
короче, когда коннекчусь к смтп серверу, коннект проходит, приглашение получаю и
вижу его... ввожу команду helo fff, жму Enter и все виснет
Если коннекчусь к локальному листенеру портов, то обнаруживаю, что вводимые
данные передаются после прерывания скрипта (закрытия соединения)
Как сделать, чтобы эти данные передавались сразу?
Кстати, это так и должно, что fork() возвращает отрицательное значение??
Чуть не забыл, Active Perl 5.6, Win NT4.0 Rus.
С уважением Сергей.
--- GoldED+/W32 1.1.4.7
* Origin: Всё идет хорошо. Только мимо (c) (2:5079/32.34)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/33483ad45f61.html, оценка из 5, голосов 10
|