The Socket module provides access to constants from the C library's sys/socket.h#include file to use with Perl's low-level socket functions. It also provides two functions, inet_aton and inet_ntoa, to convert between ASCII (like "127.0.0.1") and packed network representations of IP addresses, and two special packer/unpacker functions, sockaddr_in and sockaddr_un, which manipulate the binary socket addresses needed by those low-level calls. The :crlf import tag gives symbolic names for the various end-of-line conventions so you don't have to rely upon native interpretations of \r and \n, which vary. Most Internet protocols prefer CRLF but tolerate LF. The standard IO::Socket module provides a higher-level interface to TCP. See Chapter 16, "Interprocess Communication".use Socket; $proto = getprotobyname('udp'); socket(SOCK, PF_INET, SOCK_DGRAM, $proto) or die "socket: $!"; $iaddr = gethostbyname('hishost.com'); $port = getservbyname('time', 'udp'); $sin = sockaddr_in($port, $iaddr); send(SOCK, 0, 0, $sin) or die "send: $!"; $proto = getprotobyname('tcp'); socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; $port = getservbyname('smtp', 'tcp'); $sin = sockaddr_in($port,inet_aton("127.1")); $sin = sockaddr_in(7,inet_aton("localhost")); $sin = sockaddr_in(7,INADDR_LOOPBACK); connect(SOCK,$sin) or die "connect: $!"; ($port, $iaddr) = sockaddr_in(getpeername(SOCK)); $peer_host = gethostbyaddr($iaddr, AF_INET); $peer_addr = inet_ntoa($iaddr); $proto = getprotobyname('tcp'); socket(SOCK, PF_UNIX, SOCK_STREAM, $proto) or die "connect: $!"; unlink('/tmp/usock'); # XXX: intentionally ignore failure $sun = sockaddr_un('/tmp/usock'); connect(SOCK,$sun) or die "connect: $!"; use Socket qw(:DEFAULT :crlf); # Now you can use CR(), LF(), and CRLF() or # $CR, $LF, and $CRLF for line-endings.
Copyright © 2002 O'Reilly & Associates. All rights reserved.