
22.08.2009, 01:35
|
|
Постоянный
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме: 4646474
Репутация:
1424
|
|
Сообщение от f1rebl00d
Хороша фигня и полезна.
..
Данный скрипт отлично работает в Nix, в windows при использованиия cygwin.
При использовании Activeperl работать не будет, ето связано с неблокирующими сокетами, почитать можно здесь тыц
кароче беседовал с автором tcpforward- вроде договорились под винду подправить , мой предложенный вариант:
sub transfer {
my ($rfh, $wfh) = @_;
my $total = 0;
my $bytes;
while ($bytes = sysread $rfh, my $data, $bufsize) {
$total += $bytes;
while ($bytes > 0) {
my $written = syswrite $wfh, $data, $bytes, length($data) - $bytes;
die "write error: $!" if !defined $written && !$!{EAGAIN};
$bytes -= $written if defined $written;
}
}
verbose(1, sprintf 'xfer %d %d %d', fileno $rfh, fileno $wfh, $total);
return defined $bytes?0:1;
}
и
sub nonblock {
my $fh = shift;
if ($^O eq 'MSWin32') {
my $nonblocking = pack("L",1);
ioctl($fh, 0x8004667e, unpack("I",pack('P',$nonblocking))) == 0 or die "ioctlsocket(\$sock, FIONBIO,...):$!" ;
}
else{
my $flags = fcntl $fh, F_GETFL, 0 or
die "fcntl error: $!";
fcntl $fh, F_SETFL, $flags | O_NONBLOCK or
die "fcntl error: $!";
}
return $fh;
}
трабла из за неблокируюших сокетов, и из за возникновении ошибок в сокетах. разраб чегото молчит пока, я тестил на виртуалке под виндой вроде пашет на активперл.
Последний раз редактировалось ShAnKaR; 22.08.2009 в 01:38..
|
|
|