RECEIVE_AND_POST

Il verbo RECEIVE_AND_POST riceve i dati dell'applicazione e le informazioni sullo stato in modo asincrono. Ciò consente al programma di transazione locale (TP) di procedere con l'elaborazione mentre i dati vengono ancora arrivati all'unità logica locale (LU).

Mentre un RECEIVE_AND_POST asincrono è in sospeso, i verbi seguenti possono essere rilasciati nella stessa conversazione:

  • DEALLOCATE (AP_ABEND_PROG, AP_ABEND_SVC o AP_ABEND_TIMER)

  • GET_ATTRIBUTES

  • GET_TYPE

  • REQUEST_TO_SEND

  • SEND_ERROR

  • TEST_RTS

  • TP_ENDED

    Ciò consente a un'applicazione di usare un RECEIVE_AND_POST asincrono per ricevere dati. Mentre il RECEIVE_AND_POST è in sospeso, può comunque usare SEND_ERROR e REQUEST_TO_SEND. È consigliabile usare questa funzionalità per il supporto asincrono completo. Per informazioni sul modo in cui un TP riceve i dati e su come usare questo verbo, vedere Osservazioni in questo argomento.

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

Sintassi

  
struct receive_and_post {  
    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       fill;  
    unsigned char       rts_rcvd;  
    unsigned char       reserv4;  
    unsigned short      max_len;  
    unsigned short      dlen;  
    unsigned char FAR * dptr;  
    unsigned char FAR * sema;  
    unsigned char       reserv5;  
};   

Members

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

opext
Parametro fornito. Specifica l'estensione dell'operazione verba, AP_BASIC_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 rilasciato. Per questo verbo, vedere Codici restituiti per i codici di errore validi.

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 rilasciato. Per questo verbo, vedere Codici restituiti per i codici di errore validi.

Tp_id
Parametro fornito. Identifica il TP locale. Il valore di questo parametro viene restituito da TP_STARTED nella chiamata TP o daRECEIVE_ALLOCATE nel TP richiamato.

Conv_id
Parametro fornito. Fornisce l'identificatore della conversazione. Il valore di questo parametro viene restituito da ALLOCATEnella chiamata TP o da RECEIVE_ALLOCATE nel TP richiamato.

what_rcvd
Parametro restituito. Indica se i dati o lo stato della conversazione sono stati ricevuti. I valori possibili sono elencati nella sezione Membri

rtn_status
Parametro fornito. Indica se devono essere restituiti sia i dati che gli indicatori di stato della conversazione 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 è abbastanza grande per contenere tutti i dati che precedono l'indicatore di stato.

    Il parametro di riempimento specifica BUFFER o LL e i dati sono l'ultimo record logico prima dell'indicatore di stato.

    Riempire
    Parametro fornito. Specifica il modo in cui il TP locale riceve i dati.

    Usare AP_BUFFER per indicare che il TP locale riceve dati fino al raggiungimento del numero di byte specificati da max_len o fino alla fine dei dati. I dati sono ricevuti senza considerare il formato di record logico.

    Usare AP_LL per indicare che i dati vengono ricevuti in formato record logico. I dati ricevuti possono essere:

  • Record logico completo.

  • Una parte di byte max_len di un record logico.

  • Fine di un record logico.

    rts_rcvd
    Parametro restituito. Indica se il partner TP ha rilasciato REQUEST_TO_SEND. I valori possibili sono:

  • AP_YES indica che il TP partner ha rilasciato REQUEST_TO_SEND, che richiede che il TP locale cambi la conversazione in stato DI RICEZIONE.

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

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

    Il valore non deve superare la lunghezza del buffer per contenere i dati ricevuti. L'offset di dptr più il valore di max_len non deve superare le dimensioni del segmento di dati.

    Dlen
    Parametro restituito. Specifica 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 dall'LU locale.

    Per Microsoft® Windows®, il buffer dei dati può risiedere in un'area dati statica o in un'area allocata a livello globale. Il buffer dei dati deve adattarsi interamente all'interno di questa area.

    Sema
    Parametro fornito. Fornisce l'indirizzo del semaforo che APPC deve cancellare al termine dell'operazione di ricezione asincrona. Il parametro sema è un handle di eventi ottenuto chiamando la funzione CreateEvent o OpenEvent Win32.

    Valori restituiti dal parametro what_rcvd

  • AP_CONFIRM_DEALLOCATE indica che il partner TP ha rilasciato DEALLOCATE con dealloc_type impostato su AP_SYNC_LEVEL . Il livello di sincronizzazione della conversazione, stabilito da ALLOCATE, è AP_CONFIRM_SYNC_LEVEL. Al momento della ricezione di questo valore, il TP locale normalmente genera confermati.

  • AP_CONFIRM_SEND indica che il partner TP ha rilasciato PREPARE_TO_RECEIVE con ptr_type impostato su AP_SYNC_LEVEL . Il livello di sincronizzazione della conversazione, stabilito da ALLOCATE, è AP_CONFIRM_SYNC_LEVEL. Al momento della ricezione di questo valore, il TP locale normalmente genera CONFERMAzione e inizia a inviare dati.

  • AP_CONFIRM_WHAT_RECEIVED indica che il partner TP ha rilasciato CONFIRM. Al momento della ricezione di questo valore, il TP locale normalmente genera confermati.

  • AP_DATA indica che questo valore può essere restituito da RECEIVE_AND_POST se il riempimento è impostato su AP_BUFFER. Il TP locale ha ricevuto dati fino a max_len o alla fine dei dati. Per altre informazioni, vedere Osservazioni in questo argomento.

  • AP_DATA_COMPLETE indica, per RECEIVE_AND_POST, che il TP locale ha ricevuto un record di dati completo o l'ultima parte di un record di dati.

    Per RECEIVE_AND_POST con riempimento impostato su AP_LL, questo valore indica che il TP locale ha ricevuto un record logico completo o la fine di un record logico.

    Al momento della ricezione di questo valore, il TP locale in genere ristampa RECEIVE_AND_POST o rilascia un altro verbo di ricezione. Se il TP partner ha inviato altri dati, il TP locale inizia a ricevere una nuova unità di dati.

    In caso contrario, il TP 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 la descrizione del valore (in questa sezione) per l'azione successiva eseguita normalmente dal TP locale.

    Se primary_rc contiene AP_DEALLOC_NORMAL , la conversazione è stata deallocata in risposta al DEALLOCATE rilasciato dal partner TP.

  • AP_DATA_INCOMPLETE indica, per RECEIVE_AND_POST, che il TP locale ha ricevuto un record di dati incompleto. Il parametro max_len ha specificato un valore minore della lunghezza del record dati (o minore del resto del record di dati se non è il primo verbo di ricezione per leggere il record).

    Per RECEIVE_AND_POST con riempimento impostato su AP_LL, questo valore indica che il TP locale ha ricevuto un record logico incompleto.

    Dopo aver ricevuto questo valore, il TP locale in genere ristampa RECEIVE_AND_POST (o rilascia 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 ha immesso lo stato DI RICEZIONE. Per il TP locale, la conversazione è ora in stato SEND. Al momento della ricezione di questo valore, il TP locale usa normalmente SEND_DATA per iniziare a inviare dati.

Codici restituiti

AP_OK
Codice restituito primario; il verbo 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_DATA_SEND
Codice restituito primario; si tratta di una combinazione di AP_DATA e AP_SEND.

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

AP_DATA_CONFIRM
Codice restituito primario; si tratta di una combinazione di AP_DATA e AP_CONFIRM.

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

AP_DEALLOC_NORMAL
Codice restituito primario; il partner TP ha rilasciato DEALLOCATE con dealloc_type impostato su AP_FLUSH o AP_SYNC_LEVEL con il livello di sincronizzazione della conversazione specificata 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 di 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_INVALID_SEMAPHORE_HANDLE

Codice restituito secondario; l'indirizzo dell'handle del semaforo o del sistema RAM non è valido.

APPC non può intrappolare tutti gli handle di semaforo non validi. Se il TP passa un handle di semaforo RAM non valido, viene restituito un risultato di violazione della protezione.

AP_RCV_AND_POST_BAD_FILL

Codice restituito secondario; il parametro di riempimento è stato impostato su un valore non valido.

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

AP_RCV_AND_POST_BAD_STATE

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

AP_RCV_AND_POST_NOT_LL_BDY

Codice restituito secondario; la conversazione era in stato SEND; il TP ha iniziato ma non ha completato l'invio di un record logico.

AP_CANCELED
Codice restituito primario; il TP locale ha rilasciato uno dei verbi seguenti, che ha annullato RECEIVE_AND_POST:

DEALLOCATE con dealloc_type impostata su AP_ABEND_PROG, AP_ABEND_SVC o AP_ABEND_TIMER

SEND_ERROR

TP_ENDED

L'emissione di uno di questi verbi causa la cancellazione del semaforo.

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

Questo codice può essere restituito tramite un verbo rilasciato dopo 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 finché 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. Riprovare l'allocazione.

AP_CONVERSATION_TYPE_MISMATCH

Codice restituito secondario; l'lu del partner o TP non supporta il tipo di conversazione (basic o mappato) specificato nella richiesta di allocazione.

AP_PIP_NOT_ALLOWED

Codice restituito secondario; la richiesta di allocazione specificata dati PIP, ma il TP partner non richiede questi dati o l'lu partner non lo 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 specificati nella richiesta di allocazione non sono stati accettati dall'LU partner.

AP_SYNC_LEVEL_NOT_SUPPORTED

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

AP_TP_NAME_NOT_RECOGNIZED

Codice restituito secondario; l'lu partner non riconosce il nome TP specificato nella richiesta di allocazione.

AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

Codice restituito secondario; l'lu remoto ha rifiutato la richiesta di allocazione perché non è stato in grado di avviare il TP del partner richiesto. La condizione è permanente. Il motivo dell'errore può essere connesso al nodo remoto. Non ripetere l'allocazione finché l'errore non è stato corretto.

AP_TRANS_PGM_NOT_AVAIL_RETRY

Codice restituito secondario; l'lu remoto ha rifiutato la richiesta di allocazione perché non è stato in grado di avviare il TP del partner richiesto. La condizione può essere temporanea, ad esempio un timeout. Il motivo dell'errore può essere connesso al nodo remoto. Riprovare 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 il tp e il nodo pu 2.1 è stata interrotta (errore LAN).

  • SnaBase nel computer TP ha rilevato un ABEND.

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

    AP_COMM_SUBSYSTEM_NOT_LOADED
    Codice restituito primario; Impossibile caricare o terminare un componente obbligatorio durante l'elaborazione del verbo. Pertanto, la comunicazione non poteva essere eseguita. Contattare l'amministratore di sistema per un'azione correttiva.

    Quando questo codice restituito viene usato con ALLOCATE, può indicare che non è possibile trovare alcun sistema di comunicazione per supportare l'LU locale. Ad esempio, l'alias LU locale specificato con TP_STARTED non è corretto o non è stato configurato. Si noti che se lu_alias o mode_name è inferiore a otto caratteri, è necessario assicurarsi che questi campi siano riempiti con spazi a destra. Questo errore viene restituito se questi parametri non vengono riempiti con spazi, poiché non è disponibile alcun nodo che può soddisfare la richiesta ALLOCATE .

    Quando ALLOCATE produce questo codice restituito per un sistema client host integration server configurato con più nodi, sono presenti due codici restituiti secondari come indicato di seguito:

    0xF0000001

    Codice restituito secondario; non sono stati avviati nodi.

    0xF0000002

    Codice restituito secondario; almeno un nodo è stato avviato, ma l'lu locale (quando viene rilasciato TP_STARTED ) non è configurato in alcun nodo attivo. Il problema potrebbe essere uno dei seguenti:

  • Il nodo con l'lu locale non viene avviato.

  • L'lu locale non è configurato.

    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 finché l'errore non è stato corretto.

    AP_CONV_FAILURE_RETRY
    Codice restituito primario; la conversazione è stata terminata a causa di un errore temporaneo. Riavviare il 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; il TP ha rilasciato verbi di conversazione di base e mappati. È possibile rilasciare un solo tipo in una singola conversazione.

    AP_INVALID_VERB_SEGMENT
    Codice restituito primario; VCB esteso oltre la fine del segmento di dati.

    AP_PROG_ERROR_NO_TRUNC
    Codice restituito primario; il partner TP ha rilasciato SEND_ERROR con err_type impostato su AP_PROG mentre la conversazione era in stato SEND. I dati non sono stati troncati.

    AP_PROG_ERROR_PURGING
    Codice restituito primario; mentre in RECEIVE, PENDING, PENDING_POST, CONFIRM, CONFIRM_SEND o CONFIRM_DEALLOCATE stato, il partner TP ha rilasciato SEND_ERROR con err_type impostato su AP_PROG . I dati inviati ma non ancora ricevuti vengono eliminati.

    AP_PROG_ERROR_TRUNC
    Codice restituito primario; nello stato SEND, dopo l'invio di un record logico incompleto, il partner TP ha rilasciato SEND_ERROR con err_type impostato su AP_PROG. Il TP locale potrebbe aver ricevuto la prima parte del record logico tramite un verbo di ricezione.

    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; c'è solo un verbo di conversazione in sospeso alla volta su qualsiasi conversazione. Ciò può verificarsi se il TP locale ha più thread e più thread eseguono chiamate APPC usando la stessa conv_id.

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

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

  • Il partner TP ha rilasciato DEALLOCATE con dealloc_type impostato su AP_ABEND_PROG .

  • Il partner TP ha rilevato un ABEND, causando l'invio di una richiesta DEALLOCATE da parte del partner LU.

    AP_DEALLOC_ABEND_SVC
    Codice restituito primario; la conversazione è stata deallocata perché il partner TP ha rilasciato DEALLOCATE con dealloc_type impostato su AP_ABEND_SVC .

    AP_DEALLOC_ABEND_TIMER
    Codice restituito primario; la conversazione è stata deallocata perché il partner TP ha rilasciato DEALLOCATE con dealloc_type impostato su AP_ABEND_TIMER .

    AP_SVC_ERROR_NO_TRUNC
    Codice restituito primario; mentre nello stato SEND, il partner TP (o lu partner) ha rilasciato SEND_ERROR con err_type impostato su AP_SVC . I dati non sono stati troncati.

    AP_SVC_ERROR_PURGING
    Codice restituito primario; il partner TP (o lu partner) ha rilasciato SEND_ERROR con err_type impostato su AP_SVC mentre in RECEIVE, PENDING_POST, CONFERMA, CONFIRM_SEND o CONFIRM_DEALLOCATE stato. I dati inviati al partner TP potrebbero essere stati eliminati.

    AP_SVC_ERROR_TRUNC
    Codice restituito primario; nello stato SEND, dopo l'invio di un record logico incompleto, il partner TP (o lu partner) ha rilasciato SEND_ERROR. Il TP locale potrebbe aver ricevuto la prima parte del record logico.

Commenti

Il TP locale riceve i dati tramite il processo seguente:

  1. Il TP locale rilascia un verbo di ricezione fino al termine della ricezione di un'unità completa di dati. I dati ricevuti possono essere:

    • Un record logico.

    • Buffer di dati ricevuti indipendentemente dal formato di record logico.

      Il TP locale potrebbe dover emettere il verbo di ricezione più volte per ricevere un'unità completa di dati. Dopo aver ricevuto un'unità completa di dati, il TP locale può modificarlo. I verbi di ricezione sono RECEIVE_AND_POST, RECEIVE_AND_WAIT e RECEIVE_IMMEDIATE.

  2. Il TP locale rilascia di nuovo il verbo di ricezione. Questo ha uno degli effetti seguenti:

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

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

    La procedura seguente mostra le attività eseguite dal TP locale in usando RECEIVE_AND_POST.

Per usare RECEIVE_AND_POST

  1. Per il sistema operativo Microsoft Windows®, il TP recupera il numero di messaggio WinAsyncAPPC chiamando l'API RegisterWindowMessage o assegnando un semaforo. Il campo sema deve essere impostato su NULL se l'applicazione prevede di ricevere una notifica tramite il meccanismo di messaggio di Windows.

    APPC invia il messaggio di Windows o cancella il semaforo quando il TP locale termina la ricezione dei dati.

    Il semaforo rimarrà impostato mentre il TP locale riceve i dati in modo asincrono. APPC cancella il semaforo quando il TP locale termina la ricezione dei dati.

  2. I problemi TP RECEIVE_AND_POST.

  3. Il TP controlla il valore di primary_rc.

    Se primary_rc è AP_OK , il buffer di ricezione (indicato da dptr) riceve in modo asincrono i dati dal partner TP. Durante la ricezione dei dati in modo asincrono, il TP locale può:

    • Eseguire attività non correlate a questa conversazione.

    • Problema REQUEST_TO_SEND.

    • Raccogliere informazioni su questa conversazione emettendo GET_TYPE, GET_ATTRIBUTES o TEST_RTS.

    • Annullare prematuramente RECEIVE_AND_POST eseguendo DEALLOCATE con dealloc_type impostata su AP_ABEND_PROG, AP_ABEND_SVC o AP_ABEND_TIMER; SEND_ERROR; o TP_ENDED.

      Se, tuttavia, primary_rc non è AP_OK , RECEIVE_AND_POST ha avuto esito negativo. In questo caso, il TP locale non esegue le due attività successive.

  4. Per il sistema operativo Windows, al termine della ricezione dei dati in modo asincrono, APPC genera il messaggio Windows WinAsyncAPPC o cancella il semaforo.

  5. Il TP controlla il nuovo valore di primary_rc.

    Se primary_rc è AP_OK , il TP locale può esaminare gli altri parametri restituiti e modificare i dati ricevuti in modo asincrono.

    Se primary_rc non è AP_OK, sono significativi solo secondary_rc e rts_rcvd (ricevuti da richiesta a invio).

    Effetti sullo stato della conversazione

    La conversazione deve trovarsi nello stato RECEIVE o SEND quando il TP genera questo verbo.

    L'emissione di RECEIVE_AND_POST mentre la conversazione si trova nello stato SEND ha gli effetti seguenti:

  • L'lu locale invia le informazioni nel buffer di invio e un indicatore SEND al partner TP.

  • La conversazione cambia in PENDING_POST stato; il TP locale è pronto per ricevere informazioni dal partner TP in modo asincrono.

    La conversazione cambia due volte:

  • Al ritorno iniziale del verbo, se primary_rc contiene AP_OK , la conversazione viene modificata in PENDING_POST stato.

  • Dopo il completamento del verbo, lo stato cambia a seconda del valore del seguente:

    Parametro primary_rc

    Parametro what_rcvd se primary_rc è AP_OK

    La tabella seguente mostra il nuovo stato associato a ogni valore di what_rcvd quando primary_rc è 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 SEND
AP_DATA_COMPLETE_SEND SEND_PENDING

La tabella seguente mostra il nuovo stato associato a ogni valore di primary_rc diverso da AP_OK .

Primary_rc Nuovo stato
AP_CANCELED Nessuna modifica
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
AP_PROG_ERROR_TRUNC RECEIVE
AP_SVC_ERROR_TRUNC RECEIVE

Fine dei dati per una conversazione di base

Se il TP locale genera RECEIVE_AND_POST e imposta riempimento su AP_BUFFER, la ricezione dei dati termina quando viene raggiunta la max_len o la fine dei dati. La fine dei dati è indicata da primary_rc con un valore diverso da AP_OK (ad esempio, AP_DEALLOC_NORMAL) o da what_rcvdcon uno dei valori seguenti:

AP_SEND

AP_CONFIRM_SEND

AP_CONFIRM_DEALLOCATE

AP_CONFIRM_WHAT_RECEIVED

AP_DATA_CONFIRM_SEND

AP_DATA_CONFIRM_DEALLOCATE

AP_DATA_CONFIRM

Per determinare se la fine dei dati è stata raggiunta, il TP locale ripubblica RECEIVE_AND_POST. Se il nuovo primary_rc contiene AP_OK e what_rcvd contiene AP_DATA, la fine dei dati non è stata raggiunta. Se, tuttavia, la fine dei dati è stata raggiunta, primary_rc o what_rcvd indicherà la causa della fine dei dati.

Risoluzione dei problemi

Il TP locale può attendere in modo indefinito se si verifica una delle situazioni seguenti:

  • Per il sistema operativo Windows, il TP locale genera una richiesta di RECEIVE_AND_POST , ma il TP partner non ha inviato dati o il primary_rc iniziale non è AP_OK.

  • Per il sistema operativo/2, il TP locale genera una chiamata di funzione DosSemWait , ma il partner TP non ha inviato dati o l'primary_rc iniziale non è AP_OK.

    Ciò avviene perché APPC non emetterà il messaggio di Windows o cancella il semaforo.

    Quando si verifica una condizione che restituisce uno dei parametri di primary_rc seguenti, APPC non cancella il semaforo:

    AP_INVALID_SEMAPHORE_HANDLE

    AP_INVALID_VERB_SEGMENT

    AP_STACK_TOO_SMALL

    Per testare what_rcvd, eseguire RECEIVE_AND_POST con max_len impostato su zero, in modo che il tp locale possa determinare se il tp del partner dispone di dati da inviare, cerca conferma o ha modificato lo stato della conversazione.