Los sockets son objetos que heredan de la clase IO::Handle y por ello comparten un buen número de atributos con los ficheros y los pipes:
IO::Handle |-- IO::File |-- IO::Pipe `-- IO::Socket | |-- IO::Socket::INET `-- IO::Socket::UNIXEl dominio de un socket define la familia de protocolos de red y de esquemas de direccionamiento que son soportados por el socket.
La clase IO::Socket::INET, hereda de IO::Socket y define la conducta de los sockets en el dominio de internet. La constante asociada AF_INET caracteriza al dominio de los protocolos de internet.
La clase IO::Socket::UNIX
define las conductas de los sockets
para el dominio AF_UNIX . La constante
AF_UNIX
se usa para la comunicación
entre procesos dentro de una misma máquina. Otro nombre
para AF_UNIX
es AF_LOCAL .
pp2@nereida:~/src/perl$ perl -MIO::Socket -wde 0 DB<1> x (AF_UNIX, AF_INET) 0 1 1 2
La línea 12 del cliente HTTP del código que sigue muestra como crear un objeto
IO::Socket::INET . El constructor new
retorna undef
si no se pudo crear el objeto. El constructor acepta dos estilos
de llamada. El estilo corto sigue uno de estos formatos:
maquina.dominio.es:http maquina.dominio.es:http(8080) maquina.dominio.es:80 128.252.120.8:echo 128.252.120.8:echo(7) 128.252.120.8:7
El formato
maquina.dominio.es:http(8080)
hace que IO::Socket::INET
intente primero el puerto asociado con el servicio y - si esto fracasa -
el explicitado entre paréntesis. El método intenta automáticamente
un connect a la máquina remota.
El ejemplo del cliente HTTP que sigue muestra un uso de new
con formato largo de llamada. La tabla resume los principales
argumentos:
Argumento | Descripción | Ejemplo |
PeerAddr | Dirección remota | la.maquina.es:1026 |
PeerHost | Sinónimo de PeerAddr | 193.125.120.8:1026 |
PeerPort | Puerto remoto o servicio | echo(12) |
LocalAddr | Dirección local | la.maquina.es:1026 |
LocalHost | Sinónimo de LocalAddr | 193.125.120.8:1026 |
LocalPort | Puerto local | 127.0.0.1:http(80) |
Proto | Protocolo (nombre o número) | "tcp" , "udp" ,40 , etc. |
Type | Tipo del socket | SOCK_STREAM o SOCK_DGRAM ... |
Listen | Tamaño de la cola de escucha | un entero |
Reuse | Pone SO_REUSEADDR |
un valor lógico |
Timeout | Plazo límite | un entero |
Multihomed | El host remoto tiene varias IP | un valor lógico |
Los argumentos LocalAddr, LocalHost y LocalPort son usados por programas que actúan
como servidores. LocalAddr y LocalHost son sinónimos y
especifican la IP asociada con una de las interfaces de red local.
Si el constructor de IO::Socket::INET
detecta uno de estos argumentos
ejecutará un bind de la dirección al socket.
Si se especifica LocalPort y no se especifica LocalAddr
el constructor de
IO::Socket::INET
binds al comodín
INADDR_ANY permitiendo así al socket aceptar
conexiones desde cualquiera de las interfaces de red.