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
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.
