亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? select.pm

?? perl 解釋器
?? PM
字號:
# IO::Select.pm
#
# Copyright (c) 1995 Graham Barr. All rights reserved. This program is free
# software; you can redistribute it and/or modify it under the same terms
# as Perl itself.

package IO::Select;

=head1 NAME

IO::Select - OO interface to the select system call

=head1 SYNOPSIS

    use IO::Select;

    $s = IO::Select->new();

    $s->add(\*STDIN);
    $s->add($some_handle);

    @ready = $s->can_read($timeout);

    @ready = IO::Select->new(@handles)->read(0);

=head1 DESCRIPTION

The C<IO::Select> package implements an object approach to the system C<select>
function call. It allows the user to see what IO handles, see L<IO::Handle>,
are ready for reading, writing or have an error condition pending.

=head1 CONSTRUCTOR

=over 4

=item new ( [ HANDLES ] )

The constructor creates a new object and optionally initialises it with a set
of handles.

=back

=head1 METHODS

=over 4

=item add ( HANDLES )

Add the list of handles to the C<IO::Select> object. It is these values that
will be returned when an event occurs. C<IO::Select> keeps these values in a
cache which is indexed by the C<fileno> of the handle, so if more than one
handle with the same C<fileno> is specified then only the last one is cached.

Each handle can be an C<IO::Handle> object, an integer or an array
reference where the first element is a C<IO::Handle> or an integer.

=item remove ( HANDLES )

Remove all the given handles from the object. This method also works
by the C<fileno> of the handles. So the exact handles that were added
need not be passed, just handles that have an equivalent C<fileno>

=item exists ( HANDLE )

Returns a true value (actually the handle itself) if it is present.
Returns undef otherwise.

=item handles

Return an array of all registered handles.

=item can_read ( [ TIMEOUT ] )

Return an array of handles that are ready for reading. C<TIMEOUT> is
the maximum amount of time to wait before returning an empty list. If
C<TIMEOUT> is not given and any handles are registered then the call
will block.

=item can_write ( [ TIMEOUT ] )

Same as C<can_read> except check for handles that can be written to.

=item has_error ( [ TIMEOUT ] )

Same as C<can_read> except check for handles that have an error
condition, for example EOF.

=item count ()

Returns the number of handles that the object will check for when
one of the C<can_> methods is called or the object is passed to
the C<select> static method.

=item bits()

Return the bit string suitable as argument to the core select() call.

=item bits()

Return the bit string suitable as argument to the core select() call.

=item select ( READ, WRITE, ERROR [, TIMEOUT ] )

C<select> is a static method, that is you call it with the package
name like C<new>. C<READ>, C<WRITE> and C<ERROR> are either C<undef>
or C<IO::Select> objects. C<TIMEOUT> is optional and has the same
effect as for the core select call.

The result will be an array of 3 elements, each a reference to an array
which will hold the handles that are ready for reading, writing and have
error conditions respectively. Upon error an empty array is returned.

=back

=head1 EXAMPLE

Here is a short example which shows how C<IO::Select> could be used
to write a server which communicates with several sockets while also
listening for more connections on a listen socket

    use IO::Select;
    use IO::Socket;

    $lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
    $sel = new IO::Select( $lsn );
    
    while(@ready = $sel->can_read) {
        foreach $fh (@ready) {
            if($fh == $lsn) {
                # Create a new socket
                $new = $lsn->accept;
                $sel->add($new);
            }
            else {
                # Process socket

                # Maybe we have finished with the socket
                $sel->remove($fh);
                $fh->close;
            }
        }
    }

=head1 AUTHOR

Graham Barr E<lt>F<Graham.Barr@tiuk.ti.com>E<gt>

=head1 COPYRIGHT

Copyright (c) 1995 Graham Barr. All rights reserved. This program is free
software; you can redistribute it and/or modify it under the same terms
as Perl itself.

=cut

use     strict;
use     vars qw($VERSION @ISA);
require Exporter;

$VERSION = "1.10";

@ISA = qw(Exporter); # This is only so we can do version checking

sub VEC_BITS () {0}
sub FD_COUNT () {1}
sub FIRST_FD () {2}

sub new
{
 my $self = shift;
 my $type = ref($self) || $self;

 my $vec = bless [undef,0], $type;

 $vec->add(@_)
    if @_;

 $vec;
}

sub add
{
 shift->_update('add', @_);
}


sub remove
{
 shift->_update('remove', @_);
}


sub exists
{
 my $vec = shift;
 $vec->[$vec->_fileno(shift) + FIRST_FD];
}


sub _fileno
{
 my($self, $f) = @_;
 $f = $f->[0] if ref($f) eq 'ARRAY';
 ($f =~ /^\d+$/) ? $f : fileno($f);
}

sub _update
{
 my $vec = shift;
 my $add = shift eq 'add';

 my $bits = $vec->[VEC_BITS];
 $bits = '' unless defined $bits;

 my $count = 0;
 my $f;
 foreach $f (@_)
  {
   my $fn = $vec->_fileno($f);
   next unless defined $fn;
   my $i = $fn + FIRST_FD;
   if ($add) {
     if (defined $vec->[$i]) {
	 $vec->[$i] = $f;  # if array rest might be different, so we update
	 next;
     }
     $vec->[FD_COUNT]++;
     vec($bits, $fn, 1) = 1;
     $vec->[$i] = $f;
   } else {      # remove
     next unless defined $vec->[$i];
     $vec->[FD_COUNT]--;
     vec($bits, $fn, 1) = 0;
     $vec->[$i] = undef;
   }
   $count++;
  }
 $vec->[VEC_BITS] = $vec->[FD_COUNT] ? $bits : undef;
 $count;
}

sub can_read
{
 my $vec = shift;
 my $timeout = shift;
 my $r = $vec->[VEC_BITS];

 defined($r) && (select($r,undef,undef,$timeout) > 0)
    ? handles($vec, $r)
    : ();
}

sub can_write
{
 my $vec = shift;
 my $timeout = shift;
 my $w = $vec->[VEC_BITS];

 defined($w) && (select(undef,$w,undef,$timeout) > 0)
    ? handles($vec, $w)
    : ();
}

sub has_error
{
 my $vec = shift;
 my $timeout = shift;
 my $e = $vec->[VEC_BITS];

 defined($e) && (select(undef,undef,$e,$timeout) > 0)
    ? handles($vec, $e)
    : ();
}

sub count
{
 my $vec = shift;
 $vec->[FD_COUNT];
}

sub bits
{
 my $vec = shift;
 $vec->[VEC_BITS];
}

sub as_string  # for debugging
{
 my $vec = shift;
 my $str = ref($vec) . ": ";
 my $bits = $vec->bits;
 my $count = $vec->count;
 $str .= defined($bits) ? unpack("b*", $bits) : "undef";
 $str .= " $count";
 my @handles = @$vec;
 splice(@handles, 0, FIRST_FD);
 for (@handles) {
     $str .= " " . (defined($_) ? "$_" : "-");
 }
 $str;
}

sub _max
{
 my($a,$b,$c) = @_;
 $a > $b
    ? $a > $c
        ? $a
        : $c
    : $b > $c
        ? $b
        : $c;
}

sub select
{
 shift
   if defined $_[0] && !ref($_[0]);

 my($r,$w,$e,$t) = @_;
 my @result = ();

 my $rb = defined $r ? $r->[VEC_BITS] : undef;
 my $wb = defined $w ? $w->[VEC_BITS] : undef;
 my $eb = defined $e ? $e->[VEC_BITS] : undef;

 if(select($rb,$wb,$eb,$t) > 0)
  {
   my @r = ();
   my @w = ();
   my @e = ();
   my $i = _max(defined $r ? scalar(@$r)-1 : 0,
                defined $w ? scalar(@$w)-1 : 0,
                defined $e ? scalar(@$e)-1 : 0);

   for( ; $i >= FIRST_FD ; $i--)
    {
     my $j = $i - FIRST_FD;
     push(@r, $r->[$i])
        if defined $rb && defined $r->[$i] && vec($rb, $j, 1);
     push(@w, $w->[$i])
        if defined $wb && defined $w->[$i] && vec($wb, $j, 1);
     push(@e, $e->[$i])
        if defined $eb && defined $e->[$i] && vec($eb, $j, 1);
    }

   @result = (\@r, \@w, \@e);
  }
 @result;
}


sub handles
{
 my $vec = shift;
 my $bits = shift;
 my @h = ();
 my $i;
 my $max = scalar(@$vec) - 1;

 for ($i = FIRST_FD; $i <= $max; $i++)
  {
   next unless defined $vec->[$i];
   push(@h, $vec->[$i])
      if !defined($bits) || vec($bits, $i - FIRST_FD, 1);
  }
 
 @h;
}

1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区三区中文字幕| 成人综合婷婷国产精品久久 | 欧美视频第二页| 国产成a人亚洲| 国产九色精品成人porny| 毛片av中文字幕一区二区| 亚洲一区二区三区小说| 亚洲自拍偷拍网站| 亚洲一区二区在线视频| 午夜精品久久久久久久久| 亚洲亚洲精品在线观看| 亚洲成在人线在线播放| 五月天激情综合网| 免费一级片91| 国产高清久久久久| 国产91丝袜在线18| 色成年激情久久综合| 日本乱码高清不卡字幕| 欧美精品久久99久久在免费线| 欧美一级高清片在线观看| 日韩三级.com| 国产欧美视频一区二区| 综合欧美一区二区三区| 天天色综合成人网| 国模娜娜一区二区三区| 99久久精品一区二区| 欧美日韩免费在线视频| 精品免费视频一区二区| 亚洲与欧洲av电影| 天堂久久久久va久久久久| 麻豆精品国产传媒mv男同| 高清免费成人av| 色悠悠久久综合| 日韩一区二区三区av| 欧美国产一区二区| 一区二区三区在线视频免费观看 | 美国十次综合导航| 国产91色综合久久免费分享| 欧美在线影院一区二区| 久久久久久久久久久久久夜| 国产精品国产三级国产普通话99| 亚洲国产综合人成综合网站| 国产在线一区二区| 欧美日韩中文字幕一区| 久久久久久99精品| 亚洲国产一区二区三区| 国产成人精品一区二| 欧美日韩亚洲综合在线 | 日韩女优制服丝袜电影| 国产精品免费人成网站| 日本成人超碰在线观看| 91老司机福利 在线| 久久在线观看免费| 午夜国产不卡在线观看视频| 成人午夜在线视频| 欧美mv和日韩mv国产网站| 免费观看30秒视频久久| www.色综合.com| 2欧美一区二区三区在线观看视频| 亚洲精品国产视频| 成人综合婷婷国产精品久久蜜臀| 欧美日韩卡一卡二| 亚洲黄色录像片| 成人高清视频免费观看| 精品国产乱码久久久久久久 | 精品久久人人做人人爰| 亚洲一区二区三区四区五区中文 | 91福利视频在线| 中文字幕一区av| 粉嫩久久99精品久久久久久夜| 日韩免费高清av| 免费国产亚洲视频| 大美女一区二区三区| 国产日韩欧美综合一区| 国产精品一级片| 337p日本欧洲亚洲大胆色噜噜| 精品一区二区在线观看| 精品少妇一区二区三区免费观看 | 4438成人网| 亚洲成人福利片| 欧美日韩1234| 视频一区视频二区中文| 欧美高清激情brazzers| 日本大胆欧美人术艺术动态| 日韩欧美电影一二三| 久草精品在线观看| 久久一区二区三区四区| 国产一二三精品| 国产精品久久毛片av大全日韩| 成人丝袜18视频在线观看| 亚洲天堂免费看| 欧洲另类一二三四区| 亚洲成av人片一区二区三区| 3d成人动漫网站| 久久国产欧美日韩精品| 欧美激情自拍偷拍| 色婷婷综合中文久久一本| 肉色丝袜一区二区| 2024国产精品| 91黄色免费观看| 毛片一区二区三区| 亚洲国产精品成人综合| 91免费看视频| 蜜桃精品视频在线| 国产精品青草综合久久久久99| 91蜜桃免费观看视频| 日韩国产精品久久久久久亚洲| 欧美videossexotv100| 91免费视频网址| 久久精品二区亚洲w码| 国产精品国产自产拍高清av王其 | 奇米影视一区二区三区小说| 久久久午夜精品理论片中文字幕| 欧美一区二区性放荡片| 国产一区二区女| 亚洲一区二区3| 国产女人18毛片水真多成人如厕 | 国产日产欧美一区二区视频| 色婷婷亚洲综合| 韩国成人福利片在线播放| 亚洲一区在线电影| 国产情人综合久久777777| 欧美精品在线一区二区| av中文字幕亚洲| 精品一区二区三区久久久| 一区2区3区在线看| 久久精品视频一区二区| 欧美一区二区成人| 日本久久电影网| 成人成人成人在线视频| 经典一区二区三区| 日韩和的一区二区| 亚洲欧美视频一区| 国产欧美日产一区| 精品免费一区二区三区| 91精品国产综合久久婷婷香蕉| 99久久国产综合精品女不卡| 韩国v欧美v亚洲v日本v| 琪琪一区二区三区| 五月天婷婷综合| 亚洲欧美乱综合| 成人免费一区二区三区视频| 久久亚洲一区二区三区明星换脸 | 精品国产乱码久久久久久夜甘婷婷 | 日本高清成人免费播放| 大胆亚洲人体视频| 国产一区二区三区免费在线观看 | 精品一区二区三区免费| 天堂va蜜桃一区二区三区| 一区二区理论电影在线观看| 中文字幕亚洲欧美在线不卡| 中文字幕欧美日韩一区| 国产拍揄自揄精品视频麻豆| www精品美女久久久tv| 2023国产精品| 国产日韩欧美不卡| 国产精品国产三级国产专播品爱网| 国产午夜三级一区二区三| 久久精品夜夜夜夜久久| 国产欧美一区二区三区在线老狼| 久久久高清一区二区三区| 久久美女高清视频| 国产精品欧美一区喷水| 最新欧美精品一区二区三区| 亚洲精选在线视频| 午夜视黄欧洲亚洲| 日韩精品亚洲专区| 精品一区二区国语对白| 国产精品69毛片高清亚洲| 懂色av一区二区三区免费观看| 欧美日韩精品一区二区三区四区 | 麻豆精品蜜桃视频网站| 国产原创一区二区三区| 国产a区久久久| 色爱区综合激月婷婷| 91精品久久久久久蜜臀| 国产亚洲成aⅴ人片在线观看| 国产精品成人在线观看| 亚洲狠狠丁香婷婷综合久久久| 五月天精品一区二区三区| 韩国av一区二区三区| 成人精品国产免费网站| 色一情一乱一乱一91av| 日韩色视频在线观看| 国产精品麻豆视频| 天天射综合影视| 成人激情文学综合网| 欧美男生操女生| 欧美国产精品一区| 丝袜美腿亚洲一区二区图片| 国产精品456露脸| 欧美日韩亚洲高清一区二区| 久久久精品影视| 午夜久久久影院| 成人成人成人在线视频| 欧美一区二区播放| 一区二区三区成人| 国产盗摄精品一区二区三区在线 | 成人免费在线播放视频| 美女网站色91|