The IO::Socket module included in the core Perl distribution provides an object-oriented approach to socket programming. This module provides a convenient way to handle the large number of options you have to deal with, and it handles the laborious task of forming addresses. IO::Socket is built upon the Socket module provided in the standard library. It inherits from IO::Handle, which supports a class of filehandle objects for much of the IO library. The following IO::Socket functions are simply frontends for the corresponding built-in functions and use the same syntax:
Thesocket socketpair bind listen send recv peername (same as getpeername) sockname (same as getsockname)
IO:Socket contains two subclasses: INET and UNIX. The INET subclass is used to create and manipulate Internet-domain sockets, such as the ones used in the examples. The UNIX subclass creates Unix domain sockets.
IO::Socket greatly simplifies the implementation of a socket for client communications. The following example creates an Internet-domain socket (using the INET subclass) and attempts to connect to the specified server:
use IO::Socket; $sock = new IO::Socket::INET (PeerAddr => 'www.ora.com', PeerPort => 80, Proto => 'tcp'); die "$!" unless $sock;
On the server side, IO::Socket provides a nice wrapper for creating
server sockets. The wrapper encompasses
The parameters for the new socket object determine whether it is a server or a client socket. Because we're creating a server socket,use IO::Socket; $sock = new IO::Socket::INET (LocalAddr => 'maude.ora.com', LocalPort => 8888, Proto => 'tcp', Listen => 5); die "$!" unless $sock;
When communication is finished on both client and server sockets, they should be destroyed with$new_sock = $sock->accept();
The following methods are defined in IO::Socket and can be used on socket objects of either the INET or UNIX class:
Whether a server (receiving) or client (requesting) socket is created depends
on the parameters provided to the constructor. If
The IO::Socket::UNIX subclass creates a Unix-domain socket.
Unix-domain sockets are local to the current host and are used internally to
implement pipes, thus providing communication between unrelated processes.
sockets provides finer control than using named pipes, also
called FIFO (first-in, first-out) buffers. This is because
receiving sockets can distinguish between different client
connections, which can then be assigned to different sessions
The IO::Socket::UNIX constructor (
The following methods can be used on an object created with IO::Socket::UNIX.