/[meteor]/googlecode.com/svn/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 /googlecode.com/svn/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 48 by knops.gerd, Mon Feb 4 22:23:52 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 118  sub newServer { Line 119  sub newServer {
119                                    
120          select((select($self->{'handle'}),$|=1)[0]);          select((select($self->{'handle'}),$|=1)[0]);
121                    
122            my $vec='';
123            vec($vec,CORE::fileno($self->{'handle'}),1)=1;
124            $self->{'handleVec'}=$vec;
125            
126            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='';          my $vec='';
162          vec($vec,CORE::fileno($self->{'handle'}),1)=1;          vec($vec,CORE::fileno($self->{'handle'}),1)=1;
163          $self->{'handleVec'}=$vec;          $self->{'handleVec'}=$vec;

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

  ViewVC Help
Powered by ViewVC 1.1.26