Passa al contenuto principale

VIII. Algoritmi per l’interprete di input

Segue una descrizione concisa delle risposte dell’NCP ai comandi di rete in arrivo. CS indica sempre lo stato della connessione (Connection State). Si noti che CLOSE è una chiamata di sistema eseguita dal processo utente locale, mentre CLS è un comando di rete.

NOP​

Scartare.

RFC (RTS or STR)​

Se non esiste alcuna voce, crearne una con stato = PENDING CALL e accodare il messaggio.

Se CS = LISTENING, accodare la voce, entrare nello stato RFC-RCVD e informare l’utente della richiesta.

Se CS = RFC-SENT ma la nuova RFC non corrisponde alla richiesta, rifiutare la RFC.

In tutti gli altri casi, verificare se la RFC ha una corrispondenza. Se non ne esiste alcuna, accodare la RFC. Se la RFC corrisponde, allora se:

  • CS = RFC-SENT, entriamo nello stato OPEN.
  • CS = CLS-WAIT, la RFC viene ignorata.
  • altrimenti, la richiesta è illegale in tutti gli stati che indicano che è già stata ricevuta (questi stati sono 1,3,4,6,8,9).

In ogni caso, se l’elaborazione della RFC provoca una condizione di overflow (le risorse sono esaurite), rifiutare la connessione (inviare un CLS).

CLS​

Viene esaminata la coda delle chiamate in sospeso. Se il CLS non corrisponde alla richiesta corrente ma corrisponde a qualche altra richiesta, cancellare quella richiesta ed emettere un CLS. Se non c’è alcuna corrispondenza, il CLS viene ignorato.

Se il CLS corrisponde alla richiesta corrente e CS =

  • PENDING, cancellare la richiesta corrente. Se la coda delle richieste è vuota, cancellare la voce; altrimenti lasciare invariata la voce.
  • RFC-RCVD, emettere un CLS ed entrare nello stato ABORT.
  • ABORT, ignorare.
  • RFC-SENT, emettere un CLS. Se la coda delle chiamate in sospeso è vuota cancellare la voce, altrimenti entrare nello stato PENDING.
  • OPEN, se siamo sul lato di ricezione, la risposta è identica a quella per RFC-SENT. Se siamo sul lato di invio, svuotare la coda dei dati e, se un RFNM è ancora in sospeso, entrare nello stato RFNM-WAIT. Altrimenti la risposta è identica a quella per RFC-SENT.
  • CLS-WAIT, emettere un CLS e, se la coda delle chiamate in sospeso è vuota, cancellare la voce, altrimenti CS = PENDING.
  • DATA-WAIT, svuotare la coda dei dati ed entrare nello stato RFNM-WAIT. Un CLS corrispondente non può verificarsi negli stati CLOSED o LISTENING.

ERR​

Gli errori vengono accodati perché i programmatori di sistema li esaminino in seguito e sono considerati un errore di sistema nell’host che ha dato origine allo scambio. (Non associato ad alcuno stato).

ECO​

Il codice operativo viene cambiato in ERP e il messaggio viene ritrasmesso (non associato ad alcuno stato).

ERP​

Alla ricezione di un ERP, il sistema restituisce il testo del comando al processo che ha emesso l’ECO.

INR, INS​

Questi comandi sono abilitati solo nello stato OPEN. Alla ricezione di un INTERRUPT, il sistema fa sì che venga inviato un evento al processo associato. Un INTERRUPT viene ignorato negli stati CLS-WAIT, DATA-WAIT e RFNM-WAIT. In qualsiasi altro stato è un errore.

ALL​

ALLOCATE è valido solo nello stato OPEN e può essere inviato solo a un socket di invio. L’NCP incrementa il campo 'Their Size' nella voce associata della tabella di rendezvous della dimensione specificata nel comando ALLOCATE.

Negli stati CLS-WAIT e DATA-WAIT questo comando viene ignorato; in qualsiasi altro stato è un errore.

Data-RFNM​

Se nello stato OPEN, contrassegnare il campo Flow Control Status nella voce appropriata della tabella di rendezvous come RFNM-RECVD e inviare altri dati se necessario.

Se nello stato DATA-WAIT, aggiornare il Flow Control Status. Se la coda dei dati è vuota emettere un CLS ed entrare nello stato CLS-WAIT; altrimenti trasmettere il messaggio successivo.

Se nello stato RFNM-WAIT, aggiornare il Flow Control Status ed emettere un CLS. Se la coda delle chiamate in sospeso (Pending Call) è vuota cancellare la voce della tabella di rendezvous, altrimenti CS = PENDING.

Un Data-RFNM è un errore in tutti gli altri stati.