8

mb_receive

mb_receive
SYNOPSIS

int mb_receive( int socket, int *msg_id, int *msg_len, u_char **msg )

DESCRIPTION

mb_receive lit un message en entrée. socket est un identifiant retourné par un appel antérieur à mb_bind. msg_id est un numéro de requête qui peut servir à identifier la réponse de façon unique.

Le message est lu dans *msg qui pointe sur une zone en mémoire nouvellement allouée. La longueur du message est placée dans *msg_len qui doit pointer sur un entier.

mb_receive retourne un type de message qui peut être MB_ONEWAY, MB_TWOWAY ou MB_MULTIWAY pour une notification ou une requête, MB_REPLY pour une réponse, MB_NOBODY ou MB_TIMEOUT pour une réponse d'erreur, MB_REGISTER ou MB_PROBE pour un message d'information en réponse à un appel à mb_register ou mb_probe.

MB_ONEWAY'1'Message sans réponse.
MB_TWOWAY'2'Message avec réponse.
MB_MULTIWAY'M'Diffusion d'un message sans réponse.
MB_REPLY'R'Message en réponse à un message MB_TWOWAY précédent.
MB_NOBODY'N'Message d'erreur envoyé par le bus.
MB_TIMEOUT'T'Message d'erreur envoyé par le bus.
MB_REGISTER'I'Message d'information envoyé par le bus.
MB_PROBE'P'Message d'information envoyé par le bus.

Quand un message MB_TWOWAY est reçu, un appel à mb_reply doit suivre avant que le bus ne retourne un message MB_TIMEOUT au processus appelant. Le délai d'attente par défaut est de 60 secondes. Il peut être changé en démarrant le bus avec un argument -t. L'identifiant du message placé dans *msg_id doit être sauvegardé et passé en argument à mb_reply.

Un message MB_REPLY est reçu en réponse à un message MB_TWOWAY ou MB_ONEWAY ou MB_MULTIWAY. Dans le premier cas, il contient ce qui a été retourné par le processus communicant. Dans les deux autres cas, il contient un message vide retourné par le bus qui indique que la transmission a réussi.

Des messages MB_NOBODY et MB_TIMEOUT sont vides. Ils signalent une erreur. Ils sont envoyés directement par le bus quand aucun processus n'est enregistré avec le nom passé en argument à mb_send ou si le processus appelé ne répond pas dans les temps à un message MB_TWOWAY.

Des messages MB_REGISTER et MB_PROBE sont envoyés directement par le bus en réponse à une requête du même type. Ils contiennent une chaîne de caractères en ASCII terminée par un '\0' donnant le nombre de processus enregistrés avec le nom passé en argument à mb_register ou mb_probe. Cette chaîne de caractères peut être convertie en entier avec atoi.

Si rien ne peut être lu du connecteur socket, mb_receive retourne 0. En cas d'erreur, mb_receive retourne -1 et la variable globale errno contient le code de l'erreur.

IMPORTANT : Dès qu'un message a été traité, la mémoire allouée à l'adresse *msg doit être libérée :

if ( *msg ) {
    free( *msg );
}
Quand un message est vide, *msg_len vaut 0 ainsi que *msg.

VOIR AUSSI

mb_send, mb_reply, mb_register, mb_probe

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].