Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [Perl] Модуль Socket. Не правильно работает ф-я connect (https://forum.antichat.xyz/showthread.php?t=158758)

FunkyBoy 23.11.2009 23:09

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

#!/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

Цитата:

Сообщение от biophreak
У Вас, видимо, перл неправильный :)

Я впринцепе так и думал, пробовал разные версии 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

Цитата:

Сообщение от krypt3r
Что выведет скрипт?

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

krypt3r 26.11.2009 07:50

Странный у вас какой-то перл


Время: 21:40