PDA

Просмотр полной версии : [Perl] Модуль Socket. Не правильно работает ф-я connect


FunkyBoy
23.11.2009, 23:09
Есть такой скрипт:

#!/usr/local/bin/perl -w

print "Content-Type: text/html\n\n";
print "Соединяемся при помощи модуля Socket<br>";
use Socket; #Используем модуль Socket

$port = 10000;
$host = "4.88.167.248";
socket( SOCKET, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))); # Создаём сокет
my $socket_addr = sockaddr_in( $port, inet_aton($host) ); # адрес сокета
if (connect( SOCKET, $socket_addr)) {$result = 'Удачное соединение'}
else {$result = 'Не удалось соединиться'}
print "$result";
close SOCKET;


Проблема в том, что connect всегда возвращает истину, независимо от того получилось соединиться или не получилось.
Кто-нибудь сталкивался с такой проблемой?

biophreak
24.11.2009, 15:59
У Вас, видимо, перл неправильный :)
У меня все ок:

#!/usr/bin/perl
use warnings;
use strict;
use Socket;
my($host,$port) = ('127.0.0.1',8697);
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
my $iaddr = inet_aton($host);
my $paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr) or die 'Cannot connect';


goofy:~ $ perl ./sock.pl
Cannot connect at ./sock.pl line 10.

FunkyBoy
24.11.2009, 17:29
У Вас, видимо, перл неправильный :)


Я впринцепе так и думал, пробовал разные версии Perl (5.10.1 и 5.8.9) на обоих такая проблема.
Может быть даже дело в моей системе.

Можете скинуть ссылку, от куда вы брали perl?

biophreak
25.11.2009, 10:17
Э, ну я его ставил еще когда систему устанавливал, так что с репозитария дебиана.

biophreak
25.11.2009, 10:18
Кстати, а мой пример у Вас работает? :)

FunkyBoy
25.11.2009, 13:38
тоже выпоняется без ошибки

krypt3r
25.11.2009, 16:54
FunkyBoy, попробуйте заюзать IO::Socket::INET, например, так:

#!/usr/bin/perl
use warnings;
use strict;
use IO::Socket::INET;

my ($host, $port) = ('127.0.0.1', 8697);
my $sock = IO::Socket::INET->new (
'PeerAddr' => $host,
'PeerPort' => $port,
'Proto' => 'tcp',
'Timeout' => 20
) or die "Connection error: $@\n";
print "Connected\n";

Что выведет скрипт?

FunkyBoy
25.11.2009, 23:57
Что выведет скрипт?

Скрипт выдаёт: Connected
Модуль IO::Socket::INET сам использует Socket, по этому такой результат.

krypt3r
26.11.2009, 07:50
Странный у вас какой-то перл