Successivo: , Precedente: , Su: Funzionalità avanzate   [Contenuti][Indice]


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

Mike O’Brien (noto anche come Mr. Protocol)

Oltre a poter aprire una pipeline bidirezionale verso un coprocesso sullo stesso sistema (vedi la sezione Comunicazioni bidirezionali con un altro processo), è 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:

tipo-rete

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.

protocollo

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.

porta-locale

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

host-remoto

L’indirizzo IP o il nome di dominio completamente qualificato dell’host internet al quale ci si vuol connettere.

porta-remota

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 la sezione Variabili predefinite con cui awk fornisce informazioni).

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 documentata 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: , Precedente: , Su: Funzionalità avanzate   [Contenuti][Indice]