MC_RECEIVE_AND_WAIT

Il MC_RECEIVE_AND_WAIT riceve tutti i dati attualmente disponibili dal programma di transazione partner. Se non sono attualmente disponibili dati, il provider di servizi locale attende l'arrivo dei dati.

Per consentire l'uso completo del supporto asincrono, i verbi MC_RECEIVE_AND_WAIT in modo asincrono sono stati modificati in modo da agire come MC_RECEIVE_AND_POST verbi. In particolare, mentre un MC_RECEIVE_AND_WAIT asincrono è in attesa, nella stessa conversazione possono essere emessi i verbi seguenti:

  • GET_TYPE

  • MC_GET_ATTRIBUTES

  • MC_REQUEST_TO_SEND

  • MC_SEND_ERROR

  • MC_TEST_RTS

  • TP_ENDED

    In questo modo un'applicazione, e in particolare un emulatore 5250, può usare un MC_RECEIVE_AND_WAIT per ricevere dati. Mentre il MC_RECEIVE_AND_WAIT è in attesa, può comunque usare MC_SEND_ERROR e MC_REQUEST_TO_SEND. È consigliabile usare questa funzionalità per il supporto asincrono completo.

    La struttura seguente descrive il blocco di controllo verbo (VCB) usato dal MC_RECEIVE_AND_WAIT verbo.

Sintassi

  
struct mc_receive_and_wait {  
    unsigned short      opcode;  
    unsigned char       opext;  
    unsigned char       reserv2;  
    unsigned short      primary_rc;  
    unsigned long       secondary_rc;  
    unsigned char       tp_id[8];  
    unsigned long       conv_id;  
    unsigned short      what_rcvd;  
    unsigned char       rtn_status;  
    unsigned char       reserv4;  
    unsigned char       rts_rcvd;  
    unsigned char       reserv5;  
    unsigned short      max_len;  
    unsigned short      dlen;  
    unsigned char FAR * dptr;  
    unsigned char       reserv6[5];  
};   

Members

Opcode
Parametro fornito. Specifica il codice dell'operazione verbo, AP_M_RECEIVE_AND_WAIT.

opext
Parametro fornito. Specifica l'estensione dell'operazione verbo, AP_MAPPED_CONVERSATION.

reserv2
Campo riservato.

Primary_rc
Parametro restituito. Specifica il codice restituito primario impostato da APPC al completamento del verbo. I codici restituiti validi variano a seconda del verbo APPC emesso. Vedere Codici restituiti per i codici di errore validi per questo verbo.

Secondary_rc
Parametro restituito. Specifica il codice restituito secondario impostato da APPC al completamento del verbo. I codici restituiti validi variano a seconda del verbo APPC emesso. Vedere Codici restituiti per i codici di errore validi per questo verbo.

Tp_id
Parametro fornito. Identifica il valore TP locale.

Il valore di questo parametro viene restituito TP_STARTED nel TP di chiamata o da RECEIVE_ALLOCATE nel TP richiamato.

Conv_id
Parametro fornito. Specifica l'identificatore di conversazione.

Il valore di questo parametro viene restituito MC_ALLOCATE nel TP richiamato o RECEIVE_ALLOCATE nel TP richiamato.

what_rcvd
Parametro restituito. Indica se i dati o lo stato della conversazione sono stati ricevuti.

  • AP_CONFIRM_DEALLOCATE indica che il partner TP ha rilasciato un MC_DEALLOCATE con dealloc_type impostato su AP_SYNC_LEVEL e che il livello di sincronizzazione della conversazione, stabilito da MC_ALLOCATE, è AP_CONFIRM_SYNC_LEVEL. Alla ricezione di questo valore, il provider di servizi locale in genere MC_CONFIRMED.

  • AP_CONFIRM_SEND indica che il partner TP ha rilasciato un MC_PREPARE_TO_RECEIVE con ptr_type impostato su AP_SYNC_LEVEL e che il livello di sincronizzazione della conversazione, stabilito da MC_ALLOCATE, è AP_CONFIRM_SYNC_LEVEL. Alla ricezione di questo valore, il provider di servizi locale in genere MC_CONFIRMED e inizia a inviare i dati.

  • AP_CONFIRM_WHAT_RECEIVED indica che il partner TP ha emesso MC_CONFIRM. Alla ricezione di questo valore, il provider di servizi locale in genere MC_CONFIRMED.

  • AP_DATA_COMPLETE indica , ad MC_RECEIVE_AND_WAIT, che la versione TP locale ha ricevuto un record di dati completo o l'ultima parte di un record di dati. Alla ricezione di questo valore, il provider di servizi locale in genere MC_RECEIVE_AND_WAIT o emette un altro verbo di ricezione. Se il partner partner ha inviato più dati, il partner partner locale inizia a ricevere una nuova unità di dati.

    In caso contrario, il provider di servizi locale esamina le informazioni sullo stato, se primary_rc contiene AP_OK e what_rcvd contiene AP_SEND, AP_CONFIRM_SEND, AP_CONFIRM_DEALLOCATE o AP_CONFIRM_WHAT_RECEIVED.

    Vedere Codici restituiti in questo argomento per l'azione successiva eseguita normalmente dal TP locale.

    Se primary_rc contiene AP_DEALLOC_NORMAL, la conversazione è stata deallocata in risposta alle MC_DEALLOCATE rilasciate dal partner TP.

  • AP_DATA_INCOMPLETE indica che il TP locale ha ricevuto un record di dati incompleto. Il max_len specificato un valore minore della lunghezza del record di dati (o minore del resto del record di dati se questo non è il primo verbo di ricezione a leggere il record). Alla ricezione di questo valore, il provider di servizi locale in genere emette MC_RECEIVE_AND_WAIT (o emette un altro verbo di ricezione) per ricevere la parte successiva del record.

  • AP_NONE indica che il TP non ha ricevuto dati o indicatori di stato della conversazione.

  • AP_SEND indica, per il partner TP, che la conversazione è entrata nello stato RECEIVE. Per il TP locale, la conversazione è ora in stato SEND. Al momento della ricezione di questo valore, il provider di servizi locale usa MC_SEND_DATA per iniziare l'invio dei dati.

    rtn_status
    Parametro fornito. Indica se sia i dati che gli indicatori di stato della conversazione devono essere restituiti all'interno di una chiamata API.

  • AP_NO specifica che gli indicatori devono essere restituiti singolarmente in chiamate separate del verbo.

  • AP_YES specifica che gli indicatori devono essere restituiti insieme, purché entrambi siano disponibili. Entrambi possono essere restituiti quando:

    Il buffer di ricezione è sufficientemente grande da contenere tutti i dati che precedono l'indicatore di stato.

    I dati sono l'ultimo record di dati prima dell'indicatore di stato.

    rts_rcvd
    Parametro restituito. Contiene l'indicatore di richiesta a invio.

  • AP_YES indica che il partner TP ha emesso MC_REQUEST_TO_SEND, che richiede che il TP locale cambi la conversazione in stato RECEIVE.

  • AP_NO indica che il partner TP non ha rilasciato MC_REQUEST_TO_SEND.

    max_len
    Parametro fornito. Indica il numero massimo di byte di dati che il TP locale può ricevere. L'intervallo è compreso tra 0 e 65535.

    Per il sistema operativo Microsoft Windows e l'ambiente grafico Windows, questo valore non deve superare la lunghezza del buffer per contenere i dati ricevuti.

    Per il sistema operativo OS/2, l'offset di dptr più il valore di max_len non deve superare le dimensioni del segmento di dati.

    Emettendo MC_RECEIVE_AND_WAIT con max_len impostato su zero, il punto di distribuzione locale può determinare se il partner partner ha dati da inviare, cerca la conferma o ha modificato lo stato della conversazione.

    dlen
    Parametro restituito. Indica il numero di byte di dati ricevuti. I dati vengono archiviati nel buffer specificato da dptr. Una lunghezza pari a zero indica che non sono stati ricevuti dati.

    dptr
    Parametro fornito. Fornisce l'indirizzo del buffer per contenere i dati ricevuti dal TP locale.

    Per il Windows operativo e l'ambiente grafico Windows, il buffer di dati può risiedere in un'area dati statica o in un'area allocata a livello globale. Il buffer di dati deve rientrare interamente in quest'area.

    Per il sistema operativo OS/2, il buffer di dati deve risiedere in un segmento condiviso senza nome, allocato dalla funzione DosAllocSeg con Flag uguale a 1. Il buffer di dati deve rientrare interamente nel segmento di dati.

    Per l Windows, il buffer di dati può risiedere in un'area dati statica o in un'area allocata a livello globale. Il buffer di dati deve essere contenuto interamente in questa area.

Codici restituiti

AP_OK
Codice restituito primario; il verbo è stato eseguito correttamente.

Quando rtn_status è AP_YES, è possibile restituire il codice restituito precedente o uno dei codici restituiti seguenti.

AP_DATA_COMPLETE_SEND

Codice restituito primario; si tratta di una combinazione di AP_DATA_COMPLETE e AP_SEND.

AP_DATA_COMPLETE_CONFIRM_SEND

Codice restituito primario; si tratta di una combinazione di AP_DATA_COMPLETE e AP_CONFIRM_SEND.

AP_DATA_COMPLETE_CONFIRM

Codice restituito primario; si tratta di una combinazione di AP_DATA_COMPLETE e AP_CONFIRM_WHAT_RECEIVED.

AP_DATA_COMPLETE_CONFIRM_DEALL

Codice restituito primario; si tratta di una combinazione di AP_DATA_COMPLETE e AP_CONFIRM_DEALLOCATE.

AP_DEALLOC_NORMAL
Codice restituito primario; il partner TP ha deallocato la conversazione senza richiedere conferma e ha MC_DEALLOCATE con dealloc_type impostato su uno dei seguenti:

  • AP_CONFIRM_SYNC_LEVEL

  • AP_FLUSH

  • AP_SYNC_LEVEL con il livello di sincronizzazione della conversazione specificato come AP_NONE

    Se rtn_status è AP_YES, esaminare what_rcvd anche.

    AP_PARAMETER_CHECK
    Codice restituito primario; Il verbo non è stato eseguito a causa di un errore di parametro.

    AP_BAD_CONV_ID

    Codice restituito secondario; il valore di conv_id non corrisponde a un identificatore di conversazione assegnato da APPC.

    AP_BAD_TP_ID

    Codice restituito secondario; il valore di tp_id non corrisponde a un identificatore TP assegnato da APPC.

    AP_BAD_RETURN_STATUS_WITH_DATA

    Codice restituito secondario; Il valore rtn_status specificato non è stato riconosciuto da APPC.

    AP_INVALID_DATA_SEGMENT

    Codice restituito secondario; la lunghezza specificata per il buffer di dati è maggiore del segmento allocato per contenere il buffer.

    AP_STATE_CHECK
    Codice restituito primario; Il verbo non è stato eseguito perché è stato generato in uno stato non valido.

    AP_RCV_AND_WAIT_BAD_STATE

    Codice restituito secondario; la conversazione non era nello stato RECEIVE o SEND quando il TP ha emesso questo verbo.

    AP_ALLOCATION_ERROR
    Codice restituito primario; APPC non è riuscito ad allocare una conversazione. Lo stato della conversazione è impostato su RESET.

    Questo codice può essere restituito tramite un verbo emesso dopo MC_ALLOCATE.

    AP_ALLOCATION_FAILURE_NO_RETRY

    Codice restituito secondario; La conversazione non può essere allocata a causa di una condizione permanente, ad esempio un errore di configurazione o un errore del protocollo di sessione. Per determinare l'errore, l'amministratore di sistema deve esaminare il file di log degli errori. Non ripetere l'allocazione fino a quando l'errore non è stato corretto.

    AP_ALLOCATION_FAILURE_RETRY

    Codice restituito secondario; Impossibile allocare la conversazione a causa di una condizione temporanea, ad esempio un errore di collegamento. Il motivo dell'errore viene registrato nel log degli errori di sistema. Ripetere l'allocazione.

    AP_CONVERSATION_TYPE_MISMATCH

    Codice restituito secondario; L'unità logica partner (LU) o TP non supporta il tipo di conversazione (di base o mappato) specificato nella richiesta di allocazione.

    AP_PIP_NOT_ALLOWED

    Codice restituito secondario; la richiesta di allocazione ha specificato i dati PIP, ma il partner TP non richiede questi dati o la lu partner non li supporta.

    AP_PIP_NOT_SPECIFIED_CORRECTLY

    Codice restituito secondario; Il partner TP richiede dati PIP, ma la richiesta di allocazione non ha specificato dati PIP o un numero errato di parametri.

    AP_SECURITY_NOT_VALID

    Codice restituito secondario; L'identificatore utente o la password specificata nella richiesta di allocazione non è stata accettata dalla LU partner.

    AP_SYNC_LEVEL_NOT_SUPPORTED

    Codice restituito secondario; il partner TP non supporta il sync_level (AP_NONE o AP_CONFIRM_SYNC_LEVEL) specificato nella richiesta di allocazione oppure il sync_level non è stato riconosciuto.

    AP_TP_NAME_NOT_RECOGNIZED

    Codice restituito secondario; la LU partner non riconosce il nome TP specificato nella richiesta di allocazione.

    AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

    Codice restituito secondario; la LU remota ha rifiutato la richiesta di allocazione perché non è stato in grado di avviare il partner TP richiesto. La condizione è permanente. Il motivo dell'errore può essere registrato nel nodo remoto. Non ripetere l'allocazione fino a quando l'errore non è stato corretto.

    AP_TRANS_PGM_NOT_AVAIL_RETRY

    Codice restituito secondario; la LU remota ha rifiutato la richiesta di allocazione perché non è stato in grado di avviare il partner TP richiesto. La condizione può essere temporanea, ad esempio un timeout. Il motivo dell'errore può essere registrato nel nodo remoto. Ripetere l'allocazione.

    AP_COMM_SUBSYSTEM_ABENDED
    Codice restituito primario; indica una delle condizioni seguenti:

  • Il nodo usato da questa conversazione ha rilevato un ABEND.

  • La connessione tra TP e il nodo PU 2.1 è stata interrotta (errore LAN).

  • L'oggetto SnaBase nel computer del TP ha rilevato un ABEND.

    L'amministratore di sistema deve esaminare il log degli errori per determinare il motivo dell'abend.

    AP_CONV_FAILURE_NO_RETRY
    Codice restituito primario; la conversazione è stata terminata a causa di una condizione permanente, ad esempio un errore del protocollo di sessione. L'amministratore di sistema deve esaminare il log degli errori di sistema per determinare la causa dell'errore. Non ripetere la conversazione fino a quando l'errore non è stato corretto.

    AP_CONV_FAILURE_RETRY
    Codice restituito primario; La conversazione è stata terminata a causa di un errore temporaneo. Riavviare TP per verificare se il problema si verifica di nuovo. In caso contrario, l'amministratore di sistema deve esaminare il log degli errori per determinare la causa dell'errore.

    AP_CONVERSATION_TYPE_MIXED
    Codice restituito primario; TP ha rilasciato verbi di conversazione di base e mappati. È possibile eseguire un solo tipo in una singola conversazione.

    AP_INVALID_VERB_SEGMENT
    Codice restituito primario; il VCB si estende oltre la fine del segmento di dati.

    AP_PROG_ERROR_NO_TRUNC
    Codice restituito primario; il partner TP ha emesso MC_SEND_ERROR mentre la conversazione era in stato SEND. I dati non sono stati troncati.

    AP_PROG_ERROR_PURGING
    Codice restituito primario; in stato RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND o CONFIRM_DEALLOCATE, il partner TP ha rilasciato MC_SEND_ERROR. I dati inviati ma non ancora ricevuti vengono eliminati.

    AP_STACK_TOO_SMALL
    Codice restituito primario; le dimensioni dello stack dell'applicazione sono troppo piccole per eseguire il verbo. Aumentare le dimensioni dello stack dell'applicazione.

    AP_CONV_BUSY
    Codice restituito primario; in qualsiasi conversazione può essere presente un solo verbo di conversazione in sospeso alla volta. Ciò può verificarsi se il TP locale ha più thread e più thread emette chiamate APPC usando lo stesso conv_id.

    AP_THREAD_BLOCKING
    Codice restituito primario; Il thread chiamante è già in una chiamata di blocco.

    AP_UNEXPECTED_DOS_ERROR
    Codice restituito primario; Il sistema operativo ha restituito un errore ad APPC durante l'elaborazione di una chiamata APPC dal TP locale. Il codice restituito del sistema operativo viene restituito tramite il secondary_rc. Viene visualizzato nell'ordine di scambio dei byte intel. Se il problema persiste, rivolgersi all'amministratore di sistema.

    AP_DEALLOC_ABEND
    Codice restituito primario; la conversazione è stata deallocata per uno dei motivi seguenti:

  • Il partner TP ha MC_DEALLOCATE con dealloc_type impostato su AP_ABEND.

  • Il partner TP ha rilevato un ABEND, causando l'invio di una richiesta MC_DEALLOCATE partner.

Commenti

Il TP locale riceve i dati tramite il processo seguente:

  1. Il TP locale elava un verbo di ricezione fino al termine della ricezione di un'unità di dati completa. I dati ricevuti sono un record di dati.

    Il TP locale potrebbe dover rilasciare il verbo di ricezione più volte per ricevere un'unità di dati completa. Dopo aver ricevuto un'unità completa di dati, il TP locale può modificarli.

    I verbi di ricezione MC_RECEIVE_AND_POST, MC_RECEIVE_AND_WAIT e MC_RECEIVE_IMMEDIATE.

  2. Il TP locale elava nuovamente il verbo di ricezione. Questa operazione ha uno degli effetti seguenti:

    • Se il partner TP ha inviato più dati, il TP locale inizia a ricevere una nuova unità di dati.

    • Se il partner TP ha terminato l'invio di dati o è in attesa di conferma, le informazioni sullo stato (disponibili tramite il parametro what_rcvd ) indicano l'azione successiva eseguita normalmente dal TP locale.

    La conversazione deve essere nello stato RECEIVE o SEND quando il TP invia questo verbo.

    Rilascio del verbo nello stato SEND

    L'MC_RECEIVE_AND_WAIT mentre la conversazione è in stato SEND ha gli effetti seguenti:

  • La LU locale invia le informazioni nel buffer di invio e un indicatore SEND al partner TP.

  • La conversazione cambia in stato RECEIVE. il TP locale attende che il partner TP invii i dati.

    Modifica dello stato

    Il nuovo stato della conversazione è determinato dai fattori seguenti:

  • Stato in cui si trova la conversazione quando il provider di servizi di configurazione esegue il verbo.

  • Parametro primary_rc .

  • Parametro what_rcvd se primary_rc contiene AP_OK.

    Verbo rilasciato nello stato SEND

    Nella tabella seguente vengono fornite informazioni dettagliate sulle modifiche dello stato quando MC_RECEIVE_AND_WAIT stato SEND e primary_rc viene AP_OK .

what_rcvd Nuovo stato
AP_CONFIRM_DEALLOCATE CONFIRM_DEALLOCATE
AP_DATA_COMPLETE_CONFIRM_DEALL CONFIRM_DEALLOCATE
AP_DATA_CONFIRM_DEALLOCATE CONFIRM_DEALLOCATE
AP_CONFIRM_SEND CONFIRM_SEND
AP_DATA_COMPLETE_CONFIRM_SEND CONFIRM_SEND
AP_DATA_CONFIRM_SEND CONFIRM_SEND
AP_CONFIRM_WHAT_RECEIVED CONFERMA
AP_DATA_COMPLETE_CONFIRM CONFERMA
AP_DATA_CONFIRM CONFERMA
AP_DATA RECEIVE
AP_DATA_COMPLETE RECEIVE
AP_DATA_INCOMPLETE RECEIVE
AP_SEND Nessuna modifica
AP_DATA_COMPLETE_SEND SEND_PENDING

Nella tabella seguente vengono fornite informazioni dettagliate sulle modifiche dello stato quando MC_RECEIVE_AND_WAIT viene generato lo stato SEND e primary_rc non è AP_OK.

Primary_rc Nuovo stato
AP_ALLOCATION_ERROR RESET
AP_CONV_FAILURE_RETRY RESET
AP_CONV_FAILURE_NO_RETRY RESET
AP_DEALLOC_ABEND RESET
AP_DEALLOC_ABEND_PROG RESET
AP_DEALLOC_ABEND_SVC RESET
AP_DEALLOC_ABEND_TIMER RESET
AP_DEALLOC_NORMAL RESET
AP_PROG_ERROR_PURGING RECEIVE
AP_PROG_ERROR_NO_TRUNC RECEIVE
AP_SVC_ERROR_PURGING RECEIVE
AP_SVC_ERROR_NO_TRUNC RECEIVE

Verbo rilasciato nello stato RECEIVE

Nella tabella seguente vengono fornite informazioni dettagliate sulle modifiche dello stato quando MC_RECEIVE_AND_WAIT stato RECEIVE e primary_rc viene AP_OK .

what_rcvd Nuovo stato
AP_CONFIRM_DEALLOCATE CONFIRM_DEALLOCATE
AP_DATA_COMPLETE_CONFIRM_DEALL CONFIRM_DEALLOCATE
AP_DATA_CONFIRM_DEALLOCATE CONFIRM_DEALLOCATE
AP_CONFIRM_SEND CONFIRM_SEND
AP_DATA_COMPLETE_CONFIRM_SEND CONFIRM_SEND
AP_DATA_CONFIRM_SEND CONFIRM_SEND
AP_CONFIRM_WHAT_RECEIVED CONFERMA
AP_DATA_COMPLETE_CONFIRM CONFERMA
AP_DATA_CONFIRM CONFERMA
AP_DATA Nessuna modifica
AP_DATA_COMPLETE Nessuna modifica
AP_DATA_INCOMPLETE Nessuna modifica
AP_SEND SEND
AP_DATA_COMPLETE_SEND SEND_PENDING

Nella tabella seguente vengono fornite informazioni dettagliate sulle modifiche dello stato quando MC_RECEIVE_AND_WAIT viene generato lo stato RECEIVE primary_rc non è AP_OK.

Primary_rc Nuovo stato
AP_ALLOCATION_ERROR RESET
AP_CONV_FAILURE_RETRY RESET
AP_CONV_FAILURE_NO_RETRY RESET
AP_DEALLOC_ABEND RESET
AP_DEALLOC_ABEND_PROG RESET
AP_DEALLOC_ABEND_SVC RESET
AP_DEALLOC_ABEND_TIMER RESET
AP_DEALLOC_NORMAL RESET
AP_PROG_ERROR_PURGING Nessuna modifica
AP_PROG_ERROR_NO_TRUNC Nessuna modifica
AP_SVC_ERROR_PURGING Nessuna modifica
AP_SVC_ERROR_NO_TRUNC Nessuna modifica
AP_PROG_ERROR_TRUNC Nessuna modifica
AP_SVC_ERROR_TRUNC Nessuna modifica