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

Discussion in 'PHP' started by FunkyBoy, 23 Nov 2009.

  1. FunkyBoy

    FunkyBoy New Member

    Joined:
    18 Apr 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Есть такой скрипт:
    Code:
    #!/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 всегда возвращает истину, независимо от того получилось соединиться или не получилось.
    Кто-нибудь сталкивался с такой проблемой?
     
  2. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    У Вас, видимо, перл неправильный :)
    У меня все ок:
    Code:
    #!/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';
    
    Code:
    goofy:~ $ perl ./sock.pl
    Cannot connect at ./sock.pl line 10.
    
     
  3. FunkyBoy

    FunkyBoy New Member

    Joined:
    18 Apr 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Я впринцепе так и думал, пробовал разные версии Perl (5.10.1 и 5.8.9) на обоих такая проблема.
    Может быть даже дело в моей системе.

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

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Э, ну я его ставил еще когда систему устанавливал, так что с репозитария дебиана.
     
  5. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Кстати, а мой пример у Вас работает? :)
     
  6. FunkyBoy

    FunkyBoy New Member

    Joined:
    18 Apr 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    тоже выпоняется без ошибки
     
  7. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    FunkyBoy, попробуйте заюзать IO::Socket::INET, например, так:
    Code:
    #!/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";
    
    Что выведет скрипт?
     
  8. FunkyBoy

    FunkyBoy New Member

    Joined:
    18 Apr 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Скрипт выдаёт: Connected
    Модуль IO::Socket::INET сам использует Socket, по этому такой результат.
     
  9. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Странный у вас какой-то перл
     
    1 person likes this.
Loading...