Successivo: Profilare, Precedente: I/O bidirezionale, Su: Funzionalità avanzate [Contenuti][Indice]
gawk
per la programmazione di rete
EMRED
:
A host is a host from coast to coast,
and nobody talks to a host that’s close,
unless the host that isn’t close
is busy, hung, or dead.
EMRED
:
Un computer è un computer lontano o vicino,
e nessuno parla con un computer vicino,
a meno che il computer lontano
sia occupato, fuori linea, o spento.
Oltre a poter aprire una pipeline bidirezionale verso un coprocesso sullo stesso sistema (vedi I/O bidirezionale), è possibile attivare una connessione bidirezionale verso un altro processo o verso un altro sistema attraverso una connessione di rete IP.
Si può pensare a questo semplicemente come a una pipeline bidirezionale
molto lunga verso un coprocesso.
Il modo in cui gawk
stabilisce quando usare una rete TCP/IP è
mediante il riconoscimento di speciali nomi-file che iniziano con
‘/inet/’, con ‘/inet4/’ o con ‘/inet6/’.
La sintassi completa del nome-file speciale è /tipo-rete/protocollo/porta-locale/host-remoto/porta-remota. I componenti sono:
Specifica il tipo di connessione a internet da stabilire. Si usa ‘/inet4/’ per usare solo IPv4, e ‘/inet6/’ per usare solo IPv6. Il semplice ‘/inet/’ (che usualmente è l’unica opzione) usa il tipo di default del sistema, quasi certamente IPv4.
Il protocollo da usare sull’IP. Questo dev’essere o ‘tcp’ o ‘udp’, per una connessione IP rispettivamente TCP o UDP. TCP dovrebbe venir usato per la maggior parte delle applicazioni.
Il numero di porta TCP o UDP da usare. Si usa un numero di porta di valore
‘0’ quando si vuole che sia il sistema a scegliere una porta.
Questo è quel che si dovrebbe fare quando si scrive un’applicazione
cliente TCP o UDP.
Si può usare anche un nome di un servizio noto, come ‘smtp’
o ‘http’, nel qual caso gawk
tenta di determinare
il numero di porta predefinito usando la funzione C getaddrinfo()
.
L’indirizzo IP o il nome di dominio completamente qualificato dell’host internet al quale ci si vuol connettere.
Il numero di porta TCP o UDP da usare sul particolare host remoto. Anche in questo caso, si usi ‘0’ se non ci sono preferenze, o alternativamente, un nome di servizio comunemente noto.
NOTA: Un insuccesso nell’apertura di un socket bidirezionale darà luogo alla segnalazione di un errore non fatale al codice chiamante. Il valore di
ERRNO
indica l’errore (vedi Variabili auto-assegnate).
Si consideri il seguente esempio molto semplice:
BEGIN { Servizio = "/inet/tcp/0/localhost/daytime" Servizio |& getline print $0 close(Servizio) }
Questo programma legge la data e l’ora corrente dal server daytime
TCP del sistema locale.
Stampa poi il risultato e chiude la connessione.
Poiché questo tema è molto ampio, l’uso di gawk
per
la programmazione TCP/IP viene documentato separatamente.
Si veda
TCP/IP Internetworking with gawk
,
che fa parte della distribuzione gawk
,
per una introduzione e trattazione molto più completa e con molti
esempi.
NOTA:
gawk
può aprire solo socket diretti. Al momento non c’è alcun modo per accedere ai servizi disponibili su Secure Socket Layer (SSL); questo comprende qualsiasi servizio web il cui URL inizia con ‘https://’.
Successivo: Profilare, Precedente: I/O bidirezionale, Su: Funzionalità avanzate [Contenuti][Indice]