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.
15 our(@ISA, $VERSION, @EXPORT_OK);
21 require IO::Socket::INET;
22 require IO::Socket::UNIX if ($^O ne 'epoc' && $^O ne 'symbian');
24 @ISA = qw(IO::Handle);
28 @EXPORT_OK = qw(sockatmark);
32 if (@_ && $_[0] eq 'sockatmark') { # not very extensible but for now, fast
33 Exporter::export_to_level('IO::Socket', 1, $pkg, 'sockatmark');
36 Exporter::export 'Socket', $callpkg, @_;
42 my $sock = $class->SUPER::new();
46 ${*$sock}{'io_socket_timeout'} = delete $arg{Timeout};
48 return scalar(%arg) ? $sock->configure(\%arg)
61 my $domain = delete $arg->{Domain};
63 croak 'IO::Socket: Cannot configure a generic socket'
64 unless defined $domain;
66 croak "IO::Socket: Unsupported socket domain"
67 unless defined $domain2pkg[$domain];
69 croak "IO::Socket: Cannot configure socket in domain '$domain'"
70 unless ref($sock) eq "IO::Socket";
72 bless($sock, $domain2pkg[$domain]);
73 $sock->configure($arg);
77 @_ == 4 or croak 'usage: $sock->socket(DOMAIN, TYPE, PROTOCOL)';
78 my($sock,$domain,$type,$protocol) = @_;
80 socket($sock,$domain,$type,$protocol) or
83 ${*$sock}{'io_socket_domain'} = $domain;
84 ${*$sock}{'io_socket_type'} = $type;
85 ${*$sock}{'io_socket_proto'} = $protocol;
91 @_ == 4 || croak 'usage: IO::Socket->socketpair(DOMAIN, TYPE, PROTOCOL)';
92 my($class,$domain,$type,$protocol) = @_;
93 my $sock1 = $class->new();
94 my $sock2 = $class->new();
96 socketpair($sock1,$sock2,$domain,$type,$protocol) or
99 ${*$sock1}{'io_socket_type'} = ${*$sock2}{'io_socket_type'} = $type;
100 ${*$sock1}{'io_socket_proto'} = ${*$sock2}{'io_socket_proto'} = $protocol;
106 @_ == 2 or croak 'usage: $sock->connect(NAME)';
109 my $timeout = ${*$sock}{'io_socket_timeout'};
113 $blocking = $sock->blocking(0) if $timeout;
114 if (!connect($sock, $addr)) {
115 if (defined $timeout && $!{EINPROGRESS}) {
118 my $sel = new IO::Select $sock;
120 if (!$sel->can_write($timeout)) {
121 $err = $! || (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
122 $@ = "connect: timeout";
124 elsif (!connect($sock,$addr) && not $!{EISCONN}) {
125 # Some systems refuse to re-connect() to
126 # an already open socket and set errno to EISCONN.
131 elsif ($blocking || !$!{EINPROGRESS}) {
137 $sock->blocking(1) if $blocking;
141 $err ? undef : $sock;
145 @_ == 1 or croak 'usage: $sock->close()';
147 ${*$sock}{'io_socket_peername'} = undef;
148 $sock->SUPER::close();
152 @_ == 2 or croak 'usage: $sock->bind(NAME)';
156 return bind($sock, $addr) ? $sock
161 @_ >= 1 && @_ <= 2 or croak 'usage: $sock->listen([QUEUE])';
162 my($sock,$queue) = @_;
164 unless $queue && $queue > 0;
166 return listen($sock, $queue) ? $sock
171 @_ == 1 || @_ == 2 or croak 'usage $sock->accept([PKG])';
173 my $pkg = shift || $sock;
174 my $timeout = ${*$sock}{'io_socket_timeout'};
175 my $new = $pkg->new(Timeout => $timeout);
178 if(defined $timeout) {
181 my $sel = new IO::Select $sock;
183 unless ($sel->can_read($timeout)) {
184 $@ = 'accept: timeout';
185 $! = (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
190 $peer = accept($new,$sock)
193 return wantarray ? ($new, $peer)
198 @_ == 1 or croak 'usage: $sock->sockname()';
203 @_ == 1 or croak 'usage: $sock->peername()';
205 ${*$sock}{'io_socket_peername'} ||= getpeername($sock);
209 @_ == 1 or croak 'usage: $sock->connected()';
215 @_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]])';
217 my $flags = $_[2] || 0;
218 my $peer = $_[3] || $sock->peername;
220 croak 'send: Cannot determine peer address'
223 my $r = defined(getpeername($sock))
224 ? send($sock, $_[1], $flags)
225 : send($sock, $_[1], $flags, $peer);
227 # remember who we send to, if it was successful
228 ${*$sock}{'io_socket_peername'} = $peer
229 if(@_ == 4 && defined $r);
235 @_ == 3 || @_ == 4 or croak 'usage: $sock->recv(BUF, LEN [, FLAGS])';
238 my $flags = $_[3] || 0;
240 # remember who we recv'd from
241 ${*$sock}{'io_socket_peername'} = recv($sock, $_[1]='', $len, $flags);
245 @_ == 2 or croak 'usage: $sock->shutdown(HOW)';
246 my($sock, $how) = @_;
247 ${*$sock}{'io_socket_peername'} = undef;
248 shutdown($sock, $how);
252 @_ == 4 or croak '$sock->setsockopt(LEVEL, OPTNAME, OPTVAL)';
253 setsockopt($_[0],$_[1],$_[2],$_[3]);
256 my $intsize = length(pack("i",0));
259 @_ == 3 or croak '$sock->getsockopt(LEVEL, OPTNAME)';
260 my $r = getsockopt($_[0],$_[1],$_[2]);
263 if(defined $r && length($r) == $intsize);
269 @_ == 1 ? $sock->getsockopt(SOL_SOCKET,@_)
270 : $sock->setsockopt(SOL_SOCKET,@_);
274 @_ == 1 or croak 'usage: $sock->atmark()';
280 @_ == 1 || @_ == 2 or croak 'usage: $sock->timeout([VALUE])';
282 my $r = ${*$sock}{'io_socket_timeout'};
284 ${*$sock}{'io_socket_timeout'} = defined $val ? 0 + $val : $val
291 @_ == 1 or croak 'usage: $sock->sockdomain()';
293 ${*$sock}{'io_socket_domain'};
297 @_ == 1 or croak 'usage: $sock->socktype()';
299 ${*$sock}{'io_socket_type'}
303 @_ == 1 or croak 'usage: $sock->protocol()';
305 ${*$sock}{'io_socket_proto'};
314 IO::Socket - Object interface to socket communications
322 C<IO::Socket> provides an object interface to creating and using sockets. It
323 is built upon the L<IO::Handle> interface and inherits all the methods defined
326 C<IO::Socket> only defines methods for those operations which are common to all
327 types of socket. Operations which are specified to a socket in a particular
328 domain have methods defined in sub classes of C<IO::Socket>
330 C<IO::Socket> will export all functions (and constants) defined by L<Socket>.
338 Creates an C<IO::Socket>, which is a reference to a
339 newly created symbol (see the C<Symbol> package). C<new>
340 optionally takes arguments, these arguments are in key-value pairs.
341 C<new> only looks for one key C<Domain> which tells new which domain
342 the socket will be in. All other arguments will be passed to the
343 configuration method of the package for that domain, See below.
345 NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
347 As of VERSION 1.18 all IO::Socket objects have autoflush turned on
348 by default. This was not the case with earlier releases.
350 NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
356 See L<perlfunc> for complete descriptions of each of the following
357 supported C<IO::Socket> methods, which are just front ends for the
358 corresponding built-in functions:
367 peername (getpeername)
368 sockname (getsockname)
371 Some methods take slightly different arguments to those defined in L<perlfunc>
372 in attempt to make the interface more flexible. These are
378 perform the system call C<accept> on the socket and return a new
379 object. The new object will be created in the same class as the listen
380 socket, unless C<PKG> is specified. This object can be used to
381 communicate with the client that was trying to connect.
383 In a scalar context the new socket is returned, or undef upon
384 failure. In a list context a two-element array is returned containing
385 the new socket and the peer address; the list will be empty upon
388 The timeout in the [PKG] can be specified as zero to effect a "poll",
389 but you shouldn't do that because a new IO::Select object will be
390 created behind the scenes just to do the single poll. This is
391 horrendously inefficient. Use rather true select() with a zero
392 timeout on the handle, or non-blocking IO.
394 =item socketpair(DOMAIN, TYPE, PROTOCOL)
396 Call C<socketpair> and return a list of two sockets created, or an
397 empty list on failure.
401 Additional methods that are provided are:
407 True if the socket is currently positioned at the urgent data mark,
412 my $sock = IO::Socket::INET->new('some_server');
413 $sock->read($data, 1024) until $sock->atmark;
415 Note: this is a reasonably new addition to the family of socket
416 functions, so all systems may not support this yet. If it is
417 unsupported by the system, an attempt to use this method will
420 The atmark() functionality is also exportable as sockatmark() function:
422 use IO::Socket 'sockatmark';
424 This allows for a more traditional use of sockatmark() as a procedural
425 socket function. If your system does not support sockatmark(), the
426 C<use> declaration will fail at compile time.
430 If the socket is in a connected state the peer address is returned.
431 If the socket is not in a connected state then undef will be returned.
435 Returns the numerical number for the protocol being used on the socket, if
436 known. If the protocol is unknown, as with an AF_UNIX socket, zero
441 Returns the numerical number for the socket domain type. For example, for
442 an AF_INET socket the value of &AF_INET will be returned.
444 =item sockopt(OPT [, VAL])
446 Unified method to both set and get options in the SOL_SOCKET level. If called
447 with one argument then getsockopt is called, otherwise setsockopt is called.
451 Returns the numerical number for the socket type. For example, for
452 a SOCK_STREAM socket the value of &SOCK_STREAM will be returned.
456 Set or get the timeout value associated with this socket. If called without
457 any arguments then the current setting is returned. If called with an argument
458 the current setting is changed and the previous value returned.
464 L<Socket>, L<IO::Handle>, L<IO::Socket::INET>, L<IO::Socket::UNIX>
468 Graham Barr. atmark() by Lincoln Stein. Currently maintained by the
469 Perl Porters. Please report all bugs to <perl5-porters@perl.org>.
473 Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
474 This program is free software; you can redistribute it and/or
475 modify it under the same terms as Perl itself.
477 The atmark() implementation: Copyright 2001, Lincoln Stein <lstein@cshl.org>.
478 This module is distributed under the same terms as Perl itself.
479 Feel free to use, modify and redistribute it as long as you retain
480 the correct attribution.