Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с сокетами 
V
    Опции темы
Black Rabbit
Дата 3.11.2006, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: нет
Всего: 2



Здравствуйте. Хочу написать аналог http://www.l0rdphi1.com/tools/httpsocket/httpsocket.phps на перле.

Вот начало кода

Код

package LIB::DAdminAPI;
#use strict;
use Socket();
use IO::Socket();
use IO::Select();
require MIME::Base64;

sub new{
 my($class) = @_;
 my $class = shift;
 my $self = {
     Errors  => []
  }; 
   
 while(scalar(@_)) {
        $self->{lc($_[0])} = $_[1]; shift, shift;
    } 
    
 bless($self, $class); 
 return $self;
}

sub connect{
 my $self = shift;
  $sock = IO::Socket::INET->new(
         PeerAddr => $self->{server},
         PeerPort => $self->{port}||'2222',
         Proto    => 'tcp',
         Listen    => 5,
         Reuse     => 1,
         Timeout  => $self->{timeout}||20,
         Debug      => $self->{debug}        
     );    
 
  unless ( defined($sock) ) {
      $self->_fixError( "Unable to connect to $self->{server}: $!\n");    
      return undef;
    } 
  $sock->autoflush(1);
    
 print "Content-Type: text/html\n\n";
while ($new_sock = $sock->accept()) {
    while (defined ($buf = <$new_sock>)) {
       print $buf;
    }
}
close ($sock);
}

sub _fixError{
  my $self = shift;
  push @{$self->{Errors}},@_[0];
}


1;


Код

my $conn = new LIB::DAdminAPI(server => 'hostname');
$conn->connect();
print $conn->{Errors}[0]; 
print $!; 


На выходе в $!  получаю ошибку Bad file descriptor + скрипт надолго подвисает.
Что я делаю не так???  smile  smile  smile 


PM MAIL ICQ   Вверх
Black Rabbit
Дата 4.11.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 21.10.2004

Репутация: нет
Всего: 2



Уфф... вроде разобралась

Код

sub connect{
  my $self = shift;
 
  $sock = IO::Socket::INET->new(
         PeerAddr => $self->{server},
         PeerPort => $self->{port}||'2222',
         Proto    => 'tcp',
         Timeout  => $self->{timeout}||15    
     );    
  unless ( defined($sock) ) {
      $self->_fixError( "Unable to connect to $self->{server}: $!\n");    
      return undef;
    } 

    $sock->autoflush(1);
    while($buf=$sock->getline()){
       print $buf;
     }
}


Вот так работает, но  ошибка Bad file descriptor все равно появляется  при вызове $sock->close  smile 

Это сообщение отредактировал(а) Black Rabbit - 4.11.2006, 16:01
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.