next up previous contents
Next: Le client rend la Up: Les bases Previous: Formulation de la commande

Exécution de la commande en mode WAIT

Le client veut donc conserver son serveur. Il pourra, et cela est très important, tester le status de l'exécution de la commande. Une variable du bloc de communication nommé ackno indique si le serveur doit rendre la main (ackno == 0) ou s'il ne doit pas rendre la main (ackno == 1)

En gardant la main, le client pourra envoyer de nouvelles commandes sans se faire perturber par d'autres clients en attente. Il faut toutefois être conscient que si on garde la main, il faut absolument s'assurer que le serveur ait finis son travail avant d'écrire ou lire dans le bloc. La fonction de lancement de l'exécution de la commande sur le serveur en mode wait est shmack() et la fonction d'attente de la fin de cette exécution est shmwack(). Par exemple:

 
INTER > shmstat=shmput("COMMAND", "@dosomething")
INTER > shmstat=shmack()
INTER > shmstat=shmwack()
Lors de l'exécution, les sémaphores sont dans l'état suivant:

 
Sem #0 = 0   ncount=0   zcount=0
Sem #1 = 0   ncount=0   zcount=0
Sem #2 = 1   ncount=0   zcount=0       ackno=1
Dès la fin de l'exécution, les sémaphores sont dans l'état suivant:

 
Sem #0 = 0   ncount=0   zcount=0
Sem #1 = 0   ncount=1   zcount=0
Sem #2 = 0   ncount=0   zcount=0       ackno=1
Si le temps de réponse doit être limité par un timeout, on le donne en secondes dans l'appel à shmwack(). Par exemple, une attente se 20 secondes s'écrira:

 
INTER > shmstat=shmwack(20)
Le status retourné lors du shmwack() permet de déterminer s'il y a eu une erreur, de quel coté elle a eu lieu et le type d'erreur. Les valeurs de status possibles sont:

1 erreur Inter sur le serveur
2 serveur déconnecté
3 SIGINT (CTRL-C) sur le serveur
101 SIGHUP sur le client
102 SIGINT (CTRL-C) sur le client
113 SIGPIPE sur le client
114 SIGALRM (timeout) sur le client

next up previous contents
Next: Le client rend la Up: Les bases Previous: Formulation de la commande

WEBER Luc
Mon May 10 13:34:58 MET DST 1999