/[meteor]/trunk/Meteor/Socket.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/Meteor/Socket.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 11 by knops.gerd, Thu Dec 14 16:29:42 2006 UTC revision 62 by andrew.betts, Thu Nov 27 00:33:21 2008 UTC
# Line 45  package Meteor::Socket; Line 45  package Meteor::Socket;
45                                    
46                  # Cache getprotobyname result as on some systems it is slow.                  # Cache getprotobyname result as on some systems it is slow.
47                  $Meteor::Socket::TCP_PROTO_NAME=getprotobyname('tcp');                  $Meteor::Socket::TCP_PROTO_NAME=getprotobyname('tcp');
48                    $Meteor::Socket::UDP_PROTO_NAME=getprotobyname('udp');
49          }          }
50    
51  ###############################################################################  ###############################################################################
# Line 60  sub new { Line 61  sub new {
61                  $self={};                  $self={};
62                  bless($self,$class);                  bless($self,$class);
63          }          }
64            
65          $self->{'timeout'}=0;          $self->{'timeout'}=0;
66          $self->{'buffer'}='';          $self->{'buffer'}='';
67                    
# Line 125  sub newServer { Line 126  sub newServer {
126          return $self;          return $self;
127  }  }
128    
129    sub newUDPServer {
130            my($class,$port,$srcIP)=@_;
131            
132            ($port) || die("$class: port undefined!");
133            
134            my $self=$class->new;
135            
136            my $localAdr=INADDR_ANY;
137            $localAdr=inet_aton($srcIP) if(defined($srcIP) && $srcIP ne '');
138            
139            my $local;
140            my $sockType=PF_INET;
141            my $proto=$Meteor::Socket::UDP_PROTO_NAME;
142            
143            $self->{'port'}=$port;
144            ($local=sockaddr_in($port,$localAdr))
145                    || die("$class: sockaddr_in for port '$port' failed");
146            
147            $self->{'handle'}=$self->nextHandle();
148            $self->{'socketType'}=$sockType;
149            
150            socket($self->{'handle'},$sockType,SOCK_DGRAM,$proto)
151                    || die("$class socket: $!");
152            
153            setsockopt($self->{'handle'},SOL_SOCKET,SO_REUSEADDR,pack("l", 1))
154                    || die("setsockopt: $!");
155            
156            bind($self->{'handle'},$local)
157                    || die("$class bind: $!");
158                    
159            select((select($self->{'handle'}),$|=1)[0]);
160            
161            my $vec='';
162            vec($vec,CORE::fileno($self->{'handle'}),1)=1;
163            $self->{'handleVec'}=$vec;
164            
165            return $self;
166    }
167    
168  ###############################################################################  ###############################################################################
169  # Instance methods  # Instance methods
170  ###############################################################################  ###############################################################################
# Line 246  sub fileno { Line 286  sub fileno {
286  }  }
287    
288  1;  1;
 ############################################################################EOF  
289    ############################################################################EOF

Legend:
Removed from v.11  
changed lines
  Added in v.62

  ViewVC Help
Powered by ViewVC 1.1.26