File | /usr/local/lib/perl5/5.8.8/IO/Socket/INET.pm |
Statements Executed | 37827 |
Statement Execution Time | 819ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
461 | 1 | 1 | 170ms | 48.9s | configure | IO::Socket::INET::
922 | 2 | 1 | 101ms | 178ms | _sock_info | IO::Socket::INET::
461 | 1 | 2 | 56.8ms | 56.8ms | CORE:gpbyname (opcode) | IO::Socket::INET::
922 | 2 | 2 | 49.0ms | 124ms | peerport | IO::Socket::INET::
461 | 1 | 1 | 40.9ms | 277ms | _get_addr | IO::Socket::INET::
461 | 1 | 2 | 38.8ms | 38.8ms | CORE:gpbynumber (opcode) | IO::Socket::INET::
461 | 1 | 1 | 24.6ms | 67.4ms | peeraddr | IO::Socket::INET::
461 | 1 | 1 | 23.7ms | 48.2s | connect | IO::Socket::INET::
461 | 1 | 1 | 22.5ms | 49.5s | new | IO::Socket::INET::
461 | 1 | 1 | 21.8ms | 93.5ms | peerhost | IO::Socket::INET::
1844 | 3 | 2 | 14.6ms | 14.6ms | CORE:match (opcode) | IO::Socket::INET::
922 | 2 | 2 | 5.59ms | 5.59ms | CORE:subst (opcode) | IO::Socket::INET::
0 | 0 | 0 | 0s | 0s | BEGIN | IO::Socket::INET::
0 | 0 | 0 | 0s | 0s | _error | IO::Socket::INET::
0 | 0 | 0 | 0s | 0s | bind | IO::Socket::INET::
0 | 0 | 0 | 0s | 0s | sockaddr | IO::Socket::INET::
0 | 0 | 0 | 0s | 0s | sockhost | IO::Socket::INET::
0 | 0 | 0 | 0s | 0s | sockport | IO::Socket::INET::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | # IO::Socket::INET.pm | ||||
2 | # | ||||
3 | # Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved. | ||||
4 | # This program is free software; you can redistribute it and/or | ||||
5 | # modify it under the same terms as Perl itself. | ||||
6 | |||||
7 | package IO::Socket::INET; | ||||
8 | |||||
9 | 3 | 128µs | 1 | 25µs | use strict; # spent 25µs making 1 call to strict::import |
10 | 1 | 5µs | our(@ISA, $VERSION); | ||
11 | 3 | 336µs | 1 | 4.72ms | use IO::Socket; # spent 4.72ms making 1 call to IO::Socket::import |
12 | 3 | 109µs | 1 | 4.03ms | use Socket; # spent 4.03ms making 1 call to Exporter::import |
13 | 3 | 91µs | 1 | 234µs | use Carp; # spent 234µs making 1 call to Exporter::import |
14 | 3 | 98µs | 1 | 136µs | use Exporter; # spent 136µs making 1 call to Exporter::import |
15 | 3 | 2.94ms | 1 | 118µs | use Errno; # spent 118µs making 1 call to Exporter::import |
16 | |||||
17 | 1 | 9µs | @ISA = qw(IO::Socket); | ||
18 | 1 | 6µs | $VERSION = "1.29"; | ||
19 | |||||
20 | 1 | 7µs | my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1; | ||
21 | |||||
22 | 1 | 52µs | 2 | 138µs | IO::Socket::INET->register_domain( AF_INET ); # spent 116µs making 1 call to Socket::AUTOLOAD
# spent 22µs making 1 call to IO::Socket::register_domain |
23 | |||||
24 | 1 | 71µs | 3 | 255µs | my %socket_type = ( tcp => SOCK_STREAM, # spent 255µs making 3 calls to Socket::AUTOLOAD, avg 85µs/call |
25 | udp => SOCK_DGRAM, | ||||
26 | icmp => SOCK_RAW | ||||
27 | ); | ||||
28 | |||||
29 | # spent 49.5s (22.5ms+49.5) within IO::Socket::INET::new which was called 461 times, avg 107ms/call:
# 461 times (22.5ms+49.5s) by LWP::Protocol::http::_new_socket at line 35 of LWP/Protocol/http.pm, avg 107ms/call | ||||
30 | 1383 | 22.4ms | my $class = shift; | ||
31 | unshift(@_, "PeerAddr") if @_ == 1; | ||||
32 | return $class->SUPER::new(@_); # spent 49.5s making 461 calls to IO::Socket::new, avg 107ms/call | ||||
33 | } | ||||
34 | |||||
35 | sub _sock_info { | ||||
36 | 7376 | 77.5ms | my($addr,$port,$proto) = @_; | ||
37 | my $origport = $port; | ||||
38 | my @proto = (); | ||||
39 | my @serv = (); | ||||
40 | |||||
41 | $port = $1 # spent 3.41ms making 461 calls to IO::Socket::INET::CORE:subst, avg 7µs/call | ||||
42 | if(defined $addr && $addr =~ s,:([\w\(\)/]+)$,,); | ||||
43 | |||||
44 | 461 | 68.8ms | 922 | 7.78ms | if(defined $proto && $proto =~ /\D/) { # spent 7.78ms making 922 calls to IO::Socket::INET::CORE:match, avg 8µs/call |
45 | if(@proto = getprotobyname($proto)) { # spent 56.8ms making 461 calls to IO::Socket::INET::CORE:gpbyname, avg 123µs/call | ||||
46 | $proto = $proto[2] || undef; | ||||
47 | } | ||||
48 | else { | ||||
49 | $@ = "Bad protocol '$proto'"; | ||||
50 | return; | ||||
51 | } | ||||
52 | } | ||||
53 | |||||
54 | 2766 | 33.2ms | if(defined $port) { | ||
55 | my $defport = ($port =~ s,\((\d+)\)$,,) ? $1 : undef; # spent 2.18ms making 461 calls to IO::Socket::INET::CORE:subst, avg 5µs/call | ||||
56 | my $pnum = ($port =~ m,^(\d+)$,)[0]; # spent 4.66ms making 461 calls to IO::Socket::INET::CORE:match, avg 10µs/call | ||||
57 | |||||
58 | @serv = getservbyname($port, $proto[0] || "") # spent 2.12ms making 461 calls to IO::Socket::INET::CORE:match, avg 5µs/call | ||||
59 | if ($port =~ m,\D,); | ||||
60 | |||||
61 | $port = $serv[2] || $defport || $pnum; | ||||
62 | unless (defined $port) { | ||||
63 | $@ = "Bad service '$origport'"; | ||||
64 | return; | ||||
65 | } | ||||
66 | |||||
67 | $proto = (getprotobyname($serv[3]))[2] || undef | ||||
68 | if @serv && !$proto; | ||||
69 | } | ||||
70 | |||||
71 | return ($addr || undef, | ||||
72 | $port || undef, | ||||
73 | $proto || undef | ||||
74 | ); | ||||
75 | } | ||||
76 | |||||
77 | sub _error { | ||||
78 | my $sock = shift; | ||||
79 | my $err = shift; | ||||
80 | { | ||||
81 | local($!); | ||||
82 | my $title = ref($sock).": "; | ||||
83 | $@ = join("", $_[0] =~ /^$title/ ? "" : $title, @_); | ||||
84 | close($sock) | ||||
85 | if(defined fileno($sock)); | ||||
86 | } | ||||
87 | $! = $err; | ||||
88 | return undef; | ||||
89 | } | ||||
90 | |||||
91 | # spent 277ms (40.9+237) within IO::Socket::INET::_get_addr which was called 461 times, avg 602µs/call:
# 461 times (40.9ms+237ms) by IO::Socket::INET::configure at line 140, avg 602µs/call | ||||
92 | 1844 | 23.4ms | my($sock,$addr_str, $multi) = @_; | ||
93 | my @addr; | ||||
94 | 922 | 254ms | if ($multi && $addr_str !~ /^\d+(?:\.\d+){3}$/) { | ||
95 | (undef, undef, undef, undef, @addr) = gethostbyname($addr_str); | ||||
96 | } else { | ||||
97 | my $h = inet_aton($addr_str); # spent 237ms making 461 calls to Socket::inet_aton, avg 513µs/call | ||||
98 | push(@addr, $h) if defined $h; | ||||
99 | } | ||||
100 | @addr; | ||||
101 | } | ||||
102 | |||||
103 | # spent 48.9s (170ms+48.8) within IO::Socket::INET::configure which was called 461 times, avg 106ms/call:
# 461 times (170ms+48.8s) by Net::HTTP::http_connect at line 21 of Net/HTTP.pm, avg 106ms/call | ||||
104 | 6454 | 103ms | my($sock,$arg) = @_; | ||
105 | my($lport,$rport,$laddr,$raddr,$proto,$type); | ||||
106 | |||||
107 | |||||
108 | $arg->{LocalAddr} = $arg->{LocalHost} | ||||
109 | if exists $arg->{LocalHost} && !exists $arg->{LocalAddr}; | ||||
110 | |||||
111 | ($laddr,$lport,$proto) = _sock_info($arg->{LocalAddr}, # spent 105ms making 461 calls to IO::Socket::INET::_sock_info, avg 228µs/call | ||||
112 | $arg->{LocalPort}, | ||||
113 | $arg->{Proto}) | ||||
114 | or return _error($sock, $!, $@); | ||||
115 | |||||
116 | $laddr = defined $laddr ? inet_aton($laddr) # spent 7.93ms making 460 calls to Socket::__ANON__[Socket.pm:395], avg 17µs/call
# spent 109µs making 1 call to Socket::AUTOLOAD | ||||
117 | : INADDR_ANY; | ||||
118 | |||||
119 | return _error($sock, $EINVAL, "Bad hostname '",$arg->{LocalAddr},"'") | ||||
120 | unless(defined $laddr); | ||||
121 | |||||
122 | $arg->{PeerAddr} = $arg->{PeerHost} | ||||
123 | if exists $arg->{PeerHost} && !exists $arg->{PeerAddr}; | ||||
124 | |||||
125 | 461 | 9.88ms | unless(exists $arg->{Listen}) { | ||
126 | ($raddr,$rport,$proto) = _sock_info($arg->{PeerAddr}, # spent 72.3ms making 461 calls to IO::Socket::INET::_sock_info, avg 157µs/call | ||||
127 | $arg->{PeerPort}, | ||||
128 | $proto) | ||||
129 | or return _error($sock, $!, $@); | ||||
130 | } | ||||
131 | |||||
132 | $proto ||= (getprotobyname('tcp'))[2]; | ||||
133 | |||||
134 | my $pname = (getprotobynumber($proto))[0]; # spent 38.8ms making 461 calls to IO::Socket::INET::CORE:gpbynumber, avg 84µs/call | ||||
135 | $type = $arg->{Type} || $socket_type{lc $pname}; | ||||
136 | |||||
137 | my @raddr = (); | ||||
138 | |||||
139 | 922 | 15.5ms | if(defined $raddr) { | ||
140 | @raddr = $sock->_get_addr($raddr, $arg->{MultiHomed}); # spent 277ms making 461 calls to IO::Socket::INET::_get_addr, avg 602µs/call | ||||
141 | return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'") | ||||
142 | unless @raddr; | ||||
143 | } | ||||
144 | |||||
145 | while(1) { | ||||
146 | |||||
147 | 6454 | 84.3ms | 922 | 57.2ms | $sock->socket(AF_INET, $type, $proto) or # spent 49.2ms making 461 calls to IO::Socket::socket, avg 107µs/call
# spent 8.06ms making 461 calls to Socket::__ANON__[Socket.pm:395], avg 17µs/call |
148 | return _error($sock, $!, "$!"); | ||||
149 | |||||
150 | if (defined $arg->{Blocking}) { | ||||
151 | defined $sock->blocking($arg->{Blocking}) | ||||
152 | or return _error($sock, $!, "$!"); | ||||
153 | } | ||||
154 | |||||
155 | if ($arg->{Reuse} || $arg->{ReuseAddr}) { | ||||
156 | $sock->sockopt(SO_REUSEADDR,1) or | ||||
157 | return _error($sock, $!, "$!"); | ||||
158 | } | ||||
159 | |||||
160 | if ($arg->{ReusePort}) { | ||||
161 | $sock->sockopt(SO_REUSEPORT,1) or | ||||
162 | return _error($sock, $!, "$!"); | ||||
163 | } | ||||
164 | |||||
165 | if ($arg->{Broadcast}) { | ||||
166 | $sock->sockopt(SO_BROADCAST,1) or | ||||
167 | return _error($sock, $!, "$!"); | ||||
168 | } | ||||
169 | |||||
170 | if($lport || ($laddr ne INADDR_ANY) || exists $arg->{Listen}) { # spent 7.05ms making 461 calls to Socket::__ANON__[Socket.pm:395], avg 15µs/call | ||||
171 | $sock->bind($lport || 0, $laddr) or | ||||
172 | return _error($sock, $!, "$!"); | ||||
173 | } | ||||
174 | |||||
175 | if(exists $arg->{Listen}) { | ||||
176 | $sock->listen($arg->{Listen} || 5) or | ||||
177 | return _error($sock, $!, "$!"); | ||||
178 | last; | ||||
179 | } | ||||
180 | |||||
181 | # don't try to connect unless we're given a PeerAddr | ||||
182 | last unless exists($arg->{PeerAddr}); | ||||
183 | |||||
184 | $raddr = shift @raddr; | ||||
185 | |||||
186 | return _error($sock, $EINVAL, 'Cannot determine remote port') | ||||
187 | unless($rport || $type == SOCK_DGRAM || $type == SOCK_RAW); | ||||
188 | |||||
189 | last | ||||
190 | unless($type == SOCK_STREAM || defined $raddr); # spent 6.05ms making 461 calls to Socket::__ANON__[Socket.pm:395], avg 13µs/call | ||||
191 | |||||
192 | return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'") | ||||
193 | unless defined $raddr; | ||||
194 | |||||
195 | # my $timeout = ${*$sock}{'io_socket_timeout'}; | ||||
196 | # my $before = time() if $timeout; | ||||
197 | |||||
198 | undef $@; | ||||
199 | if ($sock->connect(pack_sockaddr_in($rport, $raddr))) { # spent 48.2s making 461 calls to IO::Socket::INET::connect, avg 105ms/call
# spent 4.60ms making 461 calls to Socket::pack_sockaddr_in, avg 10µs/call | ||||
200 | # ${*$sock}{'io_socket_timeout'} = $timeout; | ||||
201 | return $sock; | ||||
202 | } | ||||
203 | |||||
204 | return _error($sock, $!, $@ || "Timeout") | ||||
205 | unless @raddr; | ||||
206 | |||||
207 | # if ($timeout) { | ||||
208 | # my $new_timeout = $timeout - (time() - $before); | ||||
209 | # return _error($sock, | ||||
210 | # (exists(&Errno::ETIMEDOUT) ? Errno::ETIMEDOUT() : $EINVAL), | ||||
211 | # "Timeout") if $new_timeout <= 0; | ||||
212 | # ${*$sock}{'io_socket_timeout'} = $new_timeout; | ||||
213 | # } | ||||
214 | |||||
215 | } | ||||
216 | |||||
217 | $sock; | ||||
218 | } | ||||
219 | |||||
220 | # spent 48.2s (23.7ms+48.2) within IO::Socket::INET::connect which was called 461 times, avg 105ms/call:
# 461 times (23.7ms+48.2s) by IO::Socket::INET::configure at line 199, avg 105ms/call | ||||
221 | 1383 | 23.9ms | @_ == 2 || @_ == 3 or | ||
222 | croak 'usage: $sock->connect(NAME) or $sock->connect(PORT, ADDR)'; | ||||
223 | my $sock = shift; | ||||
224 | return $sock->SUPER::connect(@_ == 1 ? shift : pack_sockaddr_in(@_)); # spent 48.2s making 461 calls to IO::Socket::connect, avg 104ms/call | ||||
225 | } | ||||
226 | |||||
227 | sub bind { | ||||
228 | @_ == 2 || @_ == 3 or | ||||
229 | croak 'usage: $sock->bind(NAME) or $sock->bind(PORT, ADDR)'; | ||||
230 | my $sock = shift; | ||||
231 | return $sock->SUPER::bind(@_ == 1 ? shift : pack_sockaddr_in(@_)) | ||||
232 | } | ||||
233 | |||||
234 | sub sockaddr { | ||||
235 | @_ == 1 or croak 'usage: $sock->sockaddr()'; | ||||
236 | my($sock) = @_; | ||||
237 | my $name = $sock->sockname; | ||||
238 | $name ? (sockaddr_in($name))[1] : undef; | ||||
239 | } | ||||
240 | |||||
241 | sub sockport { | ||||
242 | @_ == 1 or croak 'usage: $sock->sockport()'; | ||||
243 | my($sock) = @_; | ||||
244 | my $name = $sock->sockname; | ||||
245 | $name ? (sockaddr_in($name))[0] : undef; | ||||
246 | } | ||||
247 | |||||
248 | sub sockhost { | ||||
249 | @_ == 1 or croak 'usage: $sock->sockhost()'; | ||||
250 | my($sock) = @_; | ||||
251 | my $addr = $sock->sockaddr; | ||||
252 | $addr ? inet_ntoa($addr) : undef; | ||||
253 | } | ||||
254 | |||||
255 | # spent 67.4ms (24.6+42.7) within IO::Socket::INET::peeraddr which was called 461 times, avg 146µs/call:
# 461 times (24.6ms+42.7ms) by IO::Socket::INET::peerhost at line 272, avg 146µs/call | ||||
256 | 1844 | 24.4ms | @_ == 1 or croak 'usage: $sock->peeraddr()'; | ||
257 | my($sock) = @_; | ||||
258 | my $name = $sock->peername; # spent 21.4ms making 461 calls to IO::Socket::peername, avg 46µs/call | ||||
259 | $name ? (sockaddr_in($name))[1] : undef; # spent 21.3ms making 461 calls to Socket::sockaddr_in, avg 46µs/call | ||||
260 | } | ||||
261 | |||||
262 | # spent 124ms (49.0+75.4) within IO::Socket::INET::peerport which was called 922 times, avg 135µs/call:
# 461 times (25.6ms+39.7ms) by Net::HTTP::Methods::http_configure at line 52 of Net/HTTP/Methods.pm, avg 142µs/call
# 461 times (23.4ms+35.7ms) by LWP::Protocol::http::_get_sock_info at line 75 of LWP/Protocol/http.pm, avg 128µs/call | ||||
263 | 3688 | 48.3ms | @_ == 1 or croak 'usage: $sock->peerport()'; | ||
264 | my($sock) = @_; | ||||
265 | my $name = $sock->peername; # spent 36.2ms making 922 calls to IO::Socket::peername, avg 39µs/call | ||||
266 | $name ? (sockaddr_in($name))[0] : undef; # spent 39.2ms making 922 calls to Socket::sockaddr_in, avg 42µs/call | ||||
267 | } | ||||
268 | |||||
269 | # spent 93.5ms (21.8+71.6) within IO::Socket::INET::peerhost which was called 461 times, avg 203µs/call:
# 461 times (21.8ms+71.6ms) by LWP::Protocol::http::_get_sock_info at line 75 of LWP/Protocol/http.pm, avg 203µs/call | ||||
270 | 1844 | 26.5ms | @_ == 1 or croak 'usage: $sock->peerhost()'; | ||
271 | my($sock) = @_; | ||||
272 | my $addr = $sock->peeraddr; # spent 67.4ms making 461 calls to IO::Socket::INET::peeraddr, avg 146µs/call | ||||
273 | $addr ? inet_ntoa($addr) : undef; # spent 4.28ms making 461 calls to Socket::inet_ntoa, avg 9µs/call | ||||
274 | } | ||||
275 | |||||
276 | 1 | 30µs | 1; | ||
277 | |||||
278 | __END__ | ||||
279 | |||||
280 | =head1 NAME | ||||
281 | |||||
282 | IO::Socket::INET - Object interface for AF_INET domain sockets | ||||
283 | |||||
284 | =head1 SYNOPSIS | ||||
285 | |||||
286 | use IO::Socket::INET; | ||||
287 | |||||
288 | =head1 DESCRIPTION | ||||
289 | |||||
290 | C<IO::Socket::INET> provides an object interface to creating and using sockets | ||||
291 | in the AF_INET domain. It is built upon the L<IO::Socket> interface and | ||||
292 | inherits all the methods defined by L<IO::Socket>. | ||||
293 | |||||
294 | =head1 CONSTRUCTOR | ||||
295 | |||||
296 | =over 4 | ||||
297 | |||||
298 | =item new ( [ARGS] ) | ||||
299 | |||||
300 | Creates an C<IO::Socket::INET> object, which is a reference to a | ||||
301 | newly created symbol (see the C<Symbol> package). C<new> | ||||
302 | optionally takes arguments, these arguments are in key-value pairs. | ||||
303 | |||||
304 | In addition to the key-value pairs accepted by L<IO::Socket>, | ||||
305 | C<IO::Socket::INET> provides. | ||||
306 | |||||
307 | |||||
308 | PeerAddr Remote host address <hostname>[:<port>] | ||||
309 | PeerHost Synonym for PeerAddr | ||||
310 | PeerPort Remote port or service <service>[(<no>)] | <no> | ||||
311 | LocalAddr Local host bind address hostname[:port] | ||||
312 | LocalHost Synonym for LocalAddr | ||||
313 | LocalPort Local host bind port <service>[(<no>)] | <no> | ||||
314 | Proto Protocol name (or number) "tcp" | "udp" | ... | ||||
315 | Type Socket type SOCK_STREAM | SOCK_DGRAM | ... | ||||
316 | Listen Queue size for listen | ||||
317 | ReuseAddr Set SO_REUSEADDR before binding | ||||
318 | Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr) | ||||
319 | ReusePort Set SO_REUSEPORT before binding | ||||
320 | Broadcast Set SO_BROADCAST before binding | ||||
321 | Timeout Timeout value for various operations | ||||
322 | MultiHomed Try all addresses for multi-homed hosts | ||||
323 | Blocking Determine if connection will be blocking mode | ||||
324 | |||||
325 | If C<Listen> is defined then a listen socket is created, else if the | ||||
326 | socket type, which is derived from the protocol, is SOCK_STREAM then | ||||
327 | connect() is called. | ||||
328 | |||||
329 | Although it is not illegal, the use of C<MultiHomed> on a socket | ||||
330 | which is in non-blocking mode is of little use. This is because the | ||||
331 | first connect will never fail with a timeout as the connect call | ||||
332 | will not block. | ||||
333 | |||||
334 | The C<PeerAddr> can be a hostname or the IP-address on the | ||||
335 | "xx.xx.xx.xx" form. The C<PeerPort> can be a number or a symbolic | ||||
336 | service name. The service name might be followed by a number in | ||||
337 | parenthesis which is used if the service is not known by the system. | ||||
338 | The C<PeerPort> specification can also be embedded in the C<PeerAddr> | ||||
339 | by preceding it with a ":". | ||||
340 | |||||
341 | If C<Proto> is not given and you specify a symbolic C<PeerPort> port, | ||||
342 | then the constructor will try to derive C<Proto> from the service | ||||
343 | name. As a last resort C<Proto> "tcp" is assumed. The C<Type> | ||||
344 | parameter will be deduced from C<Proto> if not specified. | ||||
345 | |||||
346 | If the constructor is only passed a single argument, it is assumed to | ||||
347 | be a C<PeerAddr> specification. | ||||
348 | |||||
349 | If C<Blocking> is set to 0, the connection will be in nonblocking mode. | ||||
350 | If not specified it defaults to 1 (blocking mode). | ||||
351 | |||||
352 | Examples: | ||||
353 | |||||
354 | $sock = IO::Socket::INET->new(PeerAddr => 'www.perl.org', | ||||
355 | PeerPort => 'http(80)', | ||||
356 | Proto => 'tcp'); | ||||
357 | |||||
358 | $sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)'); | ||||
359 | |||||
360 | $sock = IO::Socket::INET->new(Listen => 5, | ||||
361 | LocalAddr => 'localhost', | ||||
362 | LocalPort => 9000, | ||||
363 | Proto => 'tcp'); | ||||
364 | |||||
365 | $sock = IO::Socket::INET->new('127.0.0.1:25'); | ||||
366 | |||||
367 | $sock = IO::Socket::INET->new(PeerPort => 9999, | ||||
368 | PeerAddr => inet_ntoa(INADDR_BROADCAST), | ||||
369 | Proto => udp, | ||||
370 | LocalAddr => 'localhost', | ||||
371 | Broadcast => 1 ) | ||||
372 | or die "Can't bind : $@\n"; | ||||
373 | |||||
374 | NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE | ||||
375 | |||||
376 | As of VERSION 1.18 all IO::Socket objects have autoflush turned on | ||||
377 | by default. This was not the case with earlier releases. | ||||
378 | |||||
379 | NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE | ||||
380 | |||||
381 | =back | ||||
382 | |||||
383 | =head2 METHODS | ||||
384 | |||||
385 | =over 4 | ||||
386 | |||||
387 | =item sockaddr () | ||||
388 | |||||
389 | Return the address part of the sockaddr structure for the socket | ||||
390 | |||||
391 | =item sockport () | ||||
392 | |||||
393 | Return the port number that the socket is using on the local host | ||||
394 | |||||
395 | =item sockhost () | ||||
396 | |||||
397 | Return the address part of the sockaddr structure for the socket in a | ||||
398 | text form xx.xx.xx.xx | ||||
399 | |||||
400 | =item peeraddr () | ||||
401 | |||||
402 | Return the address part of the sockaddr structure for the socket on | ||||
403 | the peer host | ||||
404 | |||||
405 | =item peerport () | ||||
406 | |||||
407 | Return the port number for the socket on the peer host. | ||||
408 | |||||
409 | =item peerhost () | ||||
410 | |||||
411 | Return the address part of the sockaddr structure for the socket on the | ||||
412 | peer host in a text form xx.xx.xx.xx | ||||
413 | |||||
414 | =back | ||||
415 | |||||
416 | =head1 SEE ALSO | ||||
417 | |||||
418 | L<Socket>, L<IO::Socket> | ||||
419 | |||||
420 | =head1 AUTHOR | ||||
421 | |||||
422 | Graham Barr. Currently maintained by the Perl Porters. Please report all | ||||
423 | bugs to <perl5-porters@perl.org>. | ||||
424 | |||||
425 | =head1 COPYRIGHT | ||||
426 | |||||
427 | Copyright (c) 1996-8 Graham Barr <gbarr@pobox.com>. All rights reserved. | ||||
428 | This program is free software; you can redistribute it and/or | ||||
429 | modify it under the same terms as Perl itself. | ||||
430 | |||||
431 | =cut | ||||
# spent 56.8ms within IO::Socket::INET::CORE:gpbyname which was called 461 times, avg 123µs/call:
# 461 times (56.8ms+0s) by IO::Socket::INET::_sock_info at line 45 of IO/Socket/INET.pm, avg 123µs/call | |||||
# spent 38.8ms within IO::Socket::INET::CORE:gpbynumber which was called 461 times, avg 84µs/call:
# 461 times (38.8ms+0s) by IO::Socket::INET::configure at line 134 of IO/Socket/INET.pm, avg 84µs/call | |||||
# spent 14.6ms within IO::Socket::INET::CORE:match which was called 1844 times, avg 8µs/call:
# 922 times (7.78ms+0s) by IO::Socket::INET::_sock_info at line 44 of IO/Socket/INET.pm, avg 8µs/call
# 461 times (4.66ms+0s) by IO::Socket::INET::_sock_info at line 56 of IO/Socket/INET.pm, avg 10µs/call
# 461 times (2.12ms+0s) by IO::Socket::INET::_sock_info at line 58 of IO/Socket/INET.pm, avg 5µs/call | |||||
# spent 5.59ms within IO::Socket::INET::CORE:subst which was called 922 times, avg 6µs/call:
# 461 times (3.41ms+0s) by IO::Socket::INET::_sock_info at line 41 of IO/Socket/INET.pm, avg 7µs/call
# 461 times (2.18ms+0s) by IO::Socket::INET::_sock_info at line 55 of IO/Socket/INET.pm, avg 5µs/call |