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

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