El Módulo IO::Socket

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::UNIX
El 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

El constructor de IO::Socket::INET

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.



Subsecciones
Casiano Rodríguez León
2010-03-22