MC_RECEIVE_AND_WAIT

Le verbe MC_RECEIVE_AND_WAIT reçoit toutes les données actuellement disponibles à partir du programme de transaction partenaire (TP). Si aucune donnée n’est actuellement disponible, le TP local attend que les données arrivent.

Pour permettre une utilisation complète de la prise en charge asynchrone, l’émission asynchrone MC_RECEIVE_AND_WAIT verbes ont été modifiés pour agir comme les verbes MC_RECEIVE_AND_POST . Plus précisément, lorsqu’un MC_RECEIVE_AND_WAIT asynchrone est en attente, les verbes suivants peuvent être émis sur la même conversation :

  • GET_TYPE

  • MC_GET_ATTRIBUTES

  • MC_REQUEST_TO_SEND

  • MC_SEND_ERROR

  • MC_TEST_RTS

  • TP_ENDED

    Cela permet à une application, et en particulier un émulateur 5250, d’utiliser un MC_RECEIVE_AND_WAIT asynchrone pour recevoir des données. Si le MC_RECEIVE_AND_WAIT est en attente, il peut toujours utiliser des MC_SEND_ERROR et des MC_REQUEST_TO_SEND. Il est recommandé d’utiliser cette fonctionnalité pour la prise en charge asynchrone complète.

    La structure suivante décrit le bloc de contrôle de verbe (VCB) utilisé par le verbe MC_RECEIVE_AND_WAIT .

Syntaxe

  
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];  
};   

Membres

opcode
Paramètre fourni. Spécifie le code d’opération de verbe, AP_M_RECEIVE_AND_WAIT.

opext
Paramètre fourni. Spécifie l’extension de l’opération de verbe, AP_MAPPED_CONVERSATION.

reserv2
Champ réservé.

primary_rc
Paramètre retourné. Spécifie le code de retour principal défini par APPC à l’achèvement du verbe. Les codes de retour valides dépendent du verbe APPC émis. Pour connaître les codes d’erreur valides de ce verbe, consultez Codes de retour.

secondary_rc
Paramètre retourné. Spécifie le code de retour secondaire défini par APPC à l’achèvement du verbe. Les codes de retour valides dépendent du verbe APPC émis. Pour connaître les codes d’erreur valides de ce verbe, consultez Codes de retour.

tp_id
Paramètre fourni. Identifie le TP local.

La valeur de ce paramètre est retournée par TP_STARTED dans le TP appelant ou par RECEIVE_ALLOCATE dans le TP appelé.

conv_id
Paramètre fourni. Spécifie l’identificateur de conversation.

La valeur de ce paramètre est retournée par MC_ALLOCATE dans le TP appelant ou par RECEIVE_ALLOCATE dans le TP appelé.

what_rcvd
Paramètre retourné. Indique si les données ou l’état de la conversation ont été reçus.

  • AP_CONFIRM_DEALLOCATE indique que le TP partenaire a émis MC_DEALLOCATE avec dealloc_type défini sur AP_SYNC_LEVEL et que le niveau de synchronisation de la conversation, établi par MC_ALLOCATE, est AP_CONFIRM_SYNC_LEVEL. Une fois cette valeur reçue, le TP local émet normalement MC_CONFIRMED.

  • AP_CONFIRM_SEND indique que le TP partenaire a émis MC_PREPARE_TO_RECEIVE avec ptr_type défini sur AP_SYNC_LEVEL et que le niveau de synchronisation de la conversation, établi par MC_ALLOCATE, est AP_CONFIRM_SYNC_LEVEL. Une fois cette valeur reçue, le TP local émet normalement MC_CONFIRMED et commence à envoyer des données.

  • AP_CONFIRM_WHAT_RECEIVED indique que le TP partenaire a émis MC_CONFIRM. Une fois cette valeur reçue, le TP local émet normalement MC_CONFIRMED.

  • AP_DATA_COMPLETE indique, par MC_RECEIVE_AND_WAIT, que le TP local a reçu un enregistrement de données complet ou la dernière partie d’un enregistrement de données. Une fois cette valeur reçue, le TP local réémet normalement MC_RECEIVE_AND_WAIT ou émet un autre verbe Receive. Si le TP partenaire a envoyé plus de données, le TP local commence à recevoir une nouvelle unité de données.

    Dans le cas contraire, le TP local examine les informations d’État, si primary_rc contient des AP_OK et what_rcvd contient AP_SEND, AP_CONFIRM_SEND, AP_CONFIRM_DEALLOCATE ou AP_CONFIRM_WHAT_RECEIVED.

    Consultez codes de retour dans cette rubrique pour la prochaine action que le TP local prend normalement.

    Si primary_rc contient des AP_DEALLOC_NORMAL, la conversation a été désallouée en réponse à MC_DEALLOCATE émis par le TP partenaire.

  • AP_DATA_INCOMPLETE indique que le TP local a reçu un enregistrement de données incomplet. Le paramètre max_len a spécifié une valeur inférieure à la longueur de l’enregistrement de données (ou inférieure au reste de l’enregistrement de données s’il ne s’agit pas du premier verbe Receive pour lire l’enregistrement). Une fois cette valeur reçue, le TP local réémet normalement MC_RECEIVE_AND_WAIT (ou émet un autre verbe de réception) pour recevoir la partie suivante de l’enregistrement.

  • AP_NONE indique que le TP n’a pas reçu d’indicateurs d’état de conversation ou de données.

  • AP_SEND indique, pour le TP partenaire, que la conversation est entrée dans l’état de réception. Pour le TP local, la conversation est désormais à l’état d’envoi. Une fois cette valeur reçue, le TP local utilise normalement MC_SEND_DATA pour commencer à envoyer des données.

    rtn_status
    Paramètre fourni. Indique si les indicateurs d’état de la conversation et des données doivent être retournés dans un appel d’API.

  • AP_NO spécifie que les indicateurs doivent être retournés individuellement sur des appels distincts du verbe.

  • AP_YES spécifie que les indicateurs doivent être retournés ensemble, à condition que les deux soient disponibles. Les deux peuvent être retournées dans les cas suivants :

    La mémoire tampon de réception est suffisamment grande pour contenir toutes les données qui précèdent l’indicateur d’État.

    Les données sont le dernier enregistrement de données avant l’indicateur d’État.

    rts_rcvd
    Paramètre retourné. Contient l’indicateur de demande d’envoi.

  • AP_YES indique que le TP partenaire a émis MC_REQUEST_TO_SEND, ce qui demande que le TP local modifie l’état de la conversation en Receive.

  • AP_NO indique que le TP partenaire n’a pas émis MC_REQUEST_TO_SEND.

    max_len
    Paramètre fourni. Indique le nombre maximal d’octets de données que le TP local peut recevoir. La plage est comprise entre 0 et 65535.

    pour le système d’exploitation Microsoft Windows et l’environnement graphique Windows, cette valeur ne doit pas dépasser la longueur de la mémoire tampon pour contenir les données reçues.

    Pour le système d’exploitation OS/2, le décalage de DPTR plus la valeur de max_len ne doit pas dépasser la taille du segment de données.

    En émettant MC_RECEIVE_AND_WAIT avec max_len défini à zéro, le TP local peut déterminer si le TP partenaire a des données à envoyer, recherche une confirmation ou a modifié l’état de la conversation.

    dlen
    Paramètre retourné. Indique le nombre d’octets de données reçus. Les données sont stockées dans la mémoire tampon spécifiée par DPTR. Une longueur de zéro indique qu’aucune donnée n’a été reçue.

    dptr
    Paramètre fourni. Fournit l’adresse de la mémoire tampon pour contenir les données reçues par le TP local.

    pour le système d’exploitation Windows et l’environnement graphique Windows, le tampon de données peut résider dans une zone de données statiques ou dans une zone allouée globalement. La mémoire tampon de données doit être entièrement contenue dans cette zone.

    Pour le système d’exploitation OS/2, le tampon de données doit résider sur un segment partagé sans nom, qui est alloué par la fonction DosAllocSeg avec des indicateurs dont la valeur est égale à 1. La mémoire tampon de données doit tenir entièrement sur le segment de données.

    pour l’environnement Windows, le tampon de données peut résider dans une zone de données statiques ou dans une zone allouée globalement. La mémoire tampon de données doit être entièrement contenue dans cette zone.

Codes de retour

AP_OK
Code de retour principal ; indique que le verbe s’est exécuté correctement.

Lorsque rtn_status est AP_YES, le code de retour précédent ou l’un des codes de retour suivants peut être retourné.

AP_DATA_COMPLETE_SEND

Code de retour principal ; Il s’agit d’une combinaison de AP_DATA_COMPLETE et AP_SEND.

AP_DATA_COMPLETE_CONFIRM_SEND

Code de retour principal ; Il s’agit d’une combinaison de AP_DATA_COMPLETE et AP_CONFIRM_SEND.

AP_DATA_COMPLETE_CONFIRM

Code de retour principal ; Il s’agit d’une combinaison de AP_DATA_COMPLETE et AP_CONFIRM_WHAT_RECEIVED.

AP_DATA_COMPLETE_CONFIRM_DEALL

Code de retour principal ; Il s’agit d’une combinaison de AP_DATA_COMPLETE et AP_CONFIRM_DEALLOCATE.

AP_DEALLOC_NORMAL
Code de retour principal ; le TP partenaire a désalloué la conversation sans demander de confirmation ni émis MC_DEALLOCATE avec dealloc_type défini sur l’un des éléments suivants :

  • AP_CONFIRM_SYNC_LEVEL

  • AP_FLUSH

  • AP_SYNC_LEVEL avec le niveau de synchronisation de la conversation spécifiée comme AP_NONE

    Si rtn_status est AP_YES, examinez what_rcvd également.

    AP_PARAMETER_CHECK
    Code de retour principal ; le verbe n’a pas été exécuté en raison d’une erreur de paramètre.

    AP_BAD_CONV_ID

    Code de retour secondaire ; la valeur de conv_id ne correspond pas à un identificateur de conversation assigné par APPC.

    AP_BAD_TP_ID

    Code de retour secondaire ; la valeur de tp_ID ne correspond pas à un identificateur TP assigné par APPC.

    AP_BAD_RETURN_STATUS_WITH_DATA

    Code de retour secondaire ; la valeur de rtn_status spécifiée n’a pas été reconnue par APPC.

    AP_INVALID_DATA_SEGMENT

    Code de retour secondaire ; la longueur spécifiée pour la mémoire tampon de données a été plus longue que le segment alloué pour contenir la mémoire tampon.

    AP_STATE_CHECK
    Code de retour principal ; le verbe n’a pas été exécuté, car il a été émis dans un état non valide.

    AP_RCV_AND_WAIT_BAD_STATE

    Code de retour secondaire ; la conversation n’était pas dans l’État RECEIVE ou SEND lorsque le TP a émis ce verbe.

    AP_ALLOCATION_ERROR
    Code de retour principal ; APPC n’a pas pu allouer une conversation. L’état de la conversation est défini sur RESET.

    Ce code peut être retourné via un verbe émis après MC_ALLOCATE.

    AP_ALLOCATION_FAILURE_NO_RETRY

    Code de retour secondaire ; la conversation ne peut pas être allouée en raison d’une condition permanente, telle qu’une erreur de configuration ou une erreur de protocole de session. Pour déterminer l’erreur, l’administrateur système doit examiner le fichier journal des erreurs. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.

    AP_ALLOCATION_FAILURE_RETRY

    Code de retour secondaire ; la conversation n’a pas pu être allouée en raison d’une condition temporaire, telle qu’un échec de liaison. La raison de l’échec est consignée dans le journal des erreurs système. Réessayez l’allocation.

    AP_CONVERSATION_TYPE_MISMATCH

    Code de retour secondaire ; l’unité logique de partenaire (LU) ou la TP ne prend pas en charge le type de conversation (de base ou mappé) spécifié dans la demande d’allocation.

    AP_PIP_NOT_ALLOWED

    Code de retour secondaire ; la demande d’allocation a spécifié des données PIP, mais le TP partenaire ne requiert pas ces données, ou la LU partenaire ne la prend pas en charge.

    AP_PIP_NOT_SPECIFIED_CORRECTLY

    Code de retour secondaire ; le TP partenaire requiert des données PIP, mais la demande d’allocation n’a spécifié aucune donnée PIP ou un nombre incorrect de paramètres.

    AP_SECURITY_NOT_VALID

    Code de retour secondaire ; l’identificateur d’utilisateur ou le mot de passe spécifié dans la demande d’allocation n’a pas été accepté par l’unité logique du partenaire.

    AP_SYNC_LEVEL_NOT_SUPPORTED

    Code de retour secondaire ; le TP partenaire ne prend pas en charge les sync_level (AP_NONE ou AP_CONFIRM_SYNC_LEVEL) spécifiés dans la demande d’allocation, ou le sync_level n’a pas été reconnu.

    AP_TP_NAME_NOT_RECOGNIZED

    Code de retour secondaire ; le LU partenaire ne reconnaît pas le nom TP spécifié dans la demande d’allocation.

    AP_TRANS_PGM_NOT_AVAIL_NO_RETRY

    Code de retour secondaire ; le LU distant a rejeté la demande d’allocation car il n’a pas pu démarrer le TP partenaire demandé. La condition est permanente. La raison de l’erreur peut être consignée sur le nœud distant. Ne réessayez pas l’allocation tant que l’erreur n’a pas été corrigée.

    AP_TRANS_PGM_NOT_AVAIL_RETRY

    Code de retour secondaire ; le LU distant a rejeté la demande d’allocation car il n’a pas pu démarrer le TP partenaire demandé. La situation peut être temporaire, par exemple un délai d’attente. La raison de l’erreur peut être consignée sur le nœud distant. Réessayez l’allocation.

    AP_COMM_SUBSYSTEM_ABENDED
    Code de retour principal ; indique l’une des situations suivantes :

  • Le nœud utilisé par cette conversation a rencontré un abandon (ABEND).

  • La connexion a été interrompue entre le programme transactionnel et le nœud PU 2.1 (erreur LAN).

  • Le processus SnaBase qui se déroule sur l’ordinateur du programme transactionnel a rencontré un abandon (ABEND).

    L’administrateur système doit examiner le journal des erreurs pour déterminer la raison de l’abandon.

    AP_CONV_FAILURE_NO_RETRY
    Code de retour principal ; la conversation a été interrompue en raison d’une condition permanente, telle qu’une erreur de protocole de session. L’administrateur système doit examiner le journal des erreurs système pour déterminer la cause de l’erreur. Ne recommencez pas la conversation tant que l’erreur n’a pas été corrigée.

    AP_CONV_FAILURE_RETRY
    Code de retour principal ; la conversation a été interrompue en raison d’une erreur temporaire. Redémarrez le TP pour voir si le problème se reproduit. Si c’est le cas, l’administrateur système doit examiner le journal des erreurs pour déterminer la cause de l’erreur.

    AP_CONVERSATION_TYPE_MIXED
    Code de retour principal ; le TP a émis des verbes de conversation de base et mappés. Un seul type peut être émis dans une conversation unique.

    AP_INVALID_VERB_SEGMENT
    Code de retour principal ; indique que le bloc de contrôle de verbe s’étend au-delà de la fin du segment de données.

    AP_PROG_ERROR_NO_TRUNC
    Code de retour principal ; le TP partenaire a émis MC_SEND_ERROR pendant que la conversation était à l’état d’envoi. Les données n’ont pas été tronquées.

    AP_PROG_ERROR_PURGING
    Code de retour principal ; en mode réception, en attente, PENDING_POST, confirmation, CONFIRM_SEND ou CONFIRM_DEALLOCATE, le TP partenaire émis MC_SEND_ERROR. Les données envoyées mais pas encore reçues sont purgées.

    AP_STACK_TOO_SMALL
    Code de retour principal ; indique que la taille de la pile de l’application est trop petite pour exécuter le verbe. Augmentez la taille de pile de votre application.

    AP_CONV_BUSY
    Code de retour principal ; il ne peut y avoir qu’un seul verbe de conversation en attente à la fois dans une conversation. Cela peut se produire si le TP local a plusieurs threads, et que plusieurs threads émettent des appels APPC en utilisant le même conv_id.

    AP_THREAD_BLOCKING
    Code de retour principal ; indique que le thread appelant se trouve déjà dans un appel de blocage.

    AP_UNEXPECTED_DOS_ERROR
    Code de retour principal ; indique que le système d’exploitation a retourné une erreur à APPC lors du traitement d’un appel APPC à partir du programme transactionnel local. Le code de retour du système d’exploitation a été retourné via secondary_rc. Il apparaît dans l’ordre Intel avec permutation d’octets. Si le problème persiste, consultez l’administrateur système.

    AP_DEALLOC_ABEND
    Code de retour principal ; la conversation a été désallouée pour l’une des raisons suivantes :

  • Le TP partenaire émis MC_DEALLOCATE avec dealloc_type défini sur AP_ABEND.

  • Le TP partenaire a rencontré un ABEND, provoquant l’envoi d’une demande de MC_DEALLOCATE par le serveur lu du partenaire.

Remarques

Le TP local reçoit des données par le biais du processus suivant :

  1. Le TP local émet un verbe de réception jusqu’à ce qu’il ait terminé de recevoir une unité de données complète. Les données reçues sont un enregistrement de données.

    Le TP local devra peut-être émettre plusieurs fois le verbe Receive pour pouvoir recevoir une unité de données complète. Après réception d’une unité de données complète, le TP local peut le manipuler.

    Les verbes de réception sont MC_RECEIVE_AND_POST, MC_RECEIVE_AND_WAITet MC_RECEIVE_IMMEDIATE.

  2. Le TP local émet à nouveau le verbe Receive. Cela a l’un des effets suivants :

    • Si le TP partenaire a envoyé plus de données, le TP local commence à recevoir une nouvelle unité de données.

    • Si le TP partenaire a terminé l’envoi des données ou attend la confirmation, les informations d’État (disponibles via le paramètre what_rcvd ) indiquent la prochaine action que le TP local prend normalement.

    La conversation doit être à l’État RECEIVE ou SEND lorsque le TP émet ce verbe.

    Émission du verbe dans l’état d’envoi

    L’émission de MC_RECEIVE_AND_WAIT alors que la conversation est à l’état d’envoi a les effets suivants :

  • L’unité logique locale envoie les informations dans sa mémoire tampon d’envoi et un indicateur d’envoi au TP partenaire.

  • La conversation passe à l’état de réception ; le TP local attend que le TP partenaire envoie des données.

    Changement d’État

    Le nouvel état de conversation est déterminé par les facteurs suivants :

  • État dans lequel la conversation se trouve lorsque le TP émet le verbe.

  • Paramètre primary_rc .

  • Le paramètre what_rcvd si primary_rc contient des AP_OK.

    Verbe émis dans l’état d’envoi

    Le tableau suivant détaille les changements d’État lorsque MC_RECEIVE_AND_WAIT est émis dans l’état d’envoi et que primary_rc est AP_OK.

what_rcvd Nouvel État
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 CONFIRMER
AP_DATA_COMPLETE_CONFIRM CONFIRMER
AP_DATA_CONFIRM CONFIRMER
AP_DATA RECEIVE
AP_DATA_COMPLETE RECEIVE
AP_DATA_INCOMPLETE RECEIVE
AP_SEND Aucun changement
AP_DATA_COMPLETE_SEND SEND_PENDING

Le tableau suivant détaille les changements d’État lorsque MC_RECEIVE_AND_WAIT est émis dans l’état d’envoi et que primary_rc n’est pas AP_OK.

primary_rc Nouvel État
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

Verbe émis dans l’état de réception

Le tableau suivant détaille les changements d’État lorsque MC_RECEIVE_AND_WAIT est émis dans un état de réception et que primary_rc est AP_OK.

what_rcvd Nouvel État
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 CONFIRMER
AP_DATA_COMPLETE_CONFIRM CONFIRMER
AP_DATA_CONFIRM CONFIRMER
AP_DATA Aucun changement
AP_DATA_COMPLETE Aucun changement
AP_DATA_INCOMPLETE Aucun changement
AP_SEND SEND
AP_DATA_COMPLETE_SEND SEND_PENDING

Le tableau suivant détaille les changements d’État lorsque MC_RECEIVE_AND_WAIT est émis dans un état de réception et que primary_rc n’est pas AP_OK.

primary_rc Nouvel État
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 Aucun changement
AP_PROG_ERROR_NO_TRUNC Aucun changement
AP_SVC_ERROR_PURGING Aucun changement
AP_SVC_ERROR_NO_TRUNC Aucun changement
AP_PROG_ERROR_TRUNC Aucun changement
AP_SVC_ERROR_TRUNC Aucun changement