Socket
Socket, sockaddr_in, sockaddr_un, inet_aton, inet_ntoa - load the C socket.h defines and structure manipulators
use Socket;
$proto = getprotobyname('udp');
socket(Socket_Handle, PF_INET, SOCK_DGRAM, $proto);
$iaddr = gethostbyname('hishost.com');
$port = getservbyname('time', 'udp');
$sin = sockaddr_in($port, $iaddr);
send(Socket_Handle, 0, 0, $sin);
$proto = getprotobyname('tcp');
socket(Socket_Handle, PF_INET, SOCK_STREAM, $proto);
$port = getservbyname('smtp');
$sin = sockaddr_in($port,inet_aton("127.1"));
$sin = sockaddr_in(7,inet_aton("localhost"));
$sin = sockaddr_in(7,INADDR_LOOPBACK);
connect(Socket_Handle,$sin);
($port, $iaddr) = sockaddr_in(getpeername(Socket_Handle));
$peer_host = gethostbyaddr($iaddr, AF_INET);
$peer_addr = inet_ntoa($iaddr);
$proto = getprotobyname('tcp');
socket(Socket_Handle, PF_UNIX, SOCK_STREAM, $proto);
unlink('/tmp/usock');
$sun = sockaddr_un('/tmp/usock');
connect(Socket_Handle,$sun);
This module is just a translation of the C
socket.h
file.
Unlike the old mechanism of requiring a translated
socket.ph
file, this uses the h2xs program (see the Perl source distribution)
and your native C compiler. This means that it has a
far more likely chance of getting the numbers right. This includes
all of the commonly used pound-defines like AF_INET, SOCK_STREAM, etc.
In addition, some structure manipulation functions are available:
-
inet_aton HOSTNAME
-
Takes a string giving the name of a host, and translates that
to the 4-byte string (structure). Takes arguments of both
the 'rtfm.mit.edu' type and '18.181.0.24'. If the host name
cannot be resolved, returns undef.
-
inet_ntoa IP_ADDRESS
-
Takes a four byte ip address (as returned by
inet_aton()
)
and translates it into a string of the form 'd.d.d.d'
where the 'd's are numbers less than 256 (the normal
readable four dotted number notation for internet addresses).
-
INADDR_ANY
-
Note: does not return a number, but a packed string.
Returns the 4-byte wildcard ip address which specifies any
of the hosts ip addresses. (A particular machine can have
more than one ip address, each address corresponding to
a particular network interface. This wildcard address
allows you to bind to all of them simultaneously.)
Normally equivalent to inet_aton('0.0.0.0').
-
INADDR_LOOPBACK
-
Note - does not return a number.
Returns the 4-byte loopback address. Normally equivalent
to inet_aton('localhost').
-
INADDR_NONE
-
Note - does not return a number.
Returns the 4-byte invalid ip address. Normally equivalent
to inet_aton('255.255.255.255').
-
sockaddr_in PORT, ADDRESS
-
-
sockaddr_in SOCKADDR_IN
-
In an array context, unpacks its SOCKADDR_IN argument and returns an array
consisting of (PORT, ADDRESS). In a scalar context, packs its (PORT,
ADDRESS) arguments as a SOCKADDR_IN and returns it. If this is confusing,
use
pack_sockaddr_in()
and
unpack_sockaddr_in()
explicitly.
-
pack_sockaddr_in PORT, IP_ADDRESS
-
Takes two arguments, a port number and a 4 byte IP_ADDRESS (as returned by
inet_aton()
). Returns the sockaddr_in structure with those arguments
packed in with AF_INET filled in. For internet domain sockets, this
structure is normally what you need for the arguments in
bind()
,
connect()
, and
send()
, and is also returned by
getpeername()
,
getsockname()
and
recv()
.
-
unpack_sockaddr_in SOCKADDR_IN
-
Takes a sockaddr_in structure (as returned by
pack_sockaddr_in()
) and
returns an array of two elements: the port and the 4-byte ip-address.
Will croak if the structure does not have AF_INET in the right place.
-
sockaddr_un PATHNAME
-
-
sockaddr_un SOCKADDR_UN
-
In an array context, unpacks its SOCKADDR_UN argument and returns an array
consisting of (PATHNAME). In a scalar context, packs its PATHANE
arguments as a SOCKADDR_UN and returns it. If this is confusing, use
pack_sockaddr_un()
and
unpack_sockaddr_un()
explicitly.
These are only supported if your system has <sys/un.h>.
-
pack_sockaddr_un PATH
-
Takes one argument, a pathname. Returns the sockaddr_un structure with
that path packed in with AF_UNIX filled in. For unix domain sockets, this
structure is normally what you need for the arguments in
bind()
,
connect()
, and
send()
, and is also returned by
getpeername()
,
getsockname()
and
recv()
.
-
unpack_sockaddr_un SOCKADDR_UN
-
Takes a sockaddr_un structure (as returned by
pack_sockaddr_un()
)
and returns the pathname. Will croak if the structure does not
have AF_UNIX in the right place.