maitretarot-devel-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Maitretarot-devel-fr] premiere ebauche du client.


From: address@hidden
Subject: Re: [Maitretarot-devel-fr] premiere ebauche du client.
Date: Wed, 13 Mar 2002 06:12:46 +0000

> Yves Mettier <address@hidden> writes:
>
> > On 12 Mar 2002 20:05:41 +0100
> > philippe brochard <address@hidden> wrote:
> >
> > > "address@hidden"<address@hidden>
writes:
> > >
> > > > > Guillaume Weexsteen <address@hidden>
writes:
> > > > >
> > > > > > le mar 12-03-2002 à 00:05, philippe brochard
a écrit :
> > > > > > > salut,
> > > > > > >
> > > > > > > bon, j'ai commencé le client. Pour
l'instant, il ne
> > > > fait
> > > > > > > que se connecter et se deconnecter.
> > > > > > >
> > > > > > > et j'ai 2 problemes :
> > > > > > >
> > > > > > > de temps en temps le serveur ne veut pas se
lancer.
> > > > > > > j'obtient le message d'erreur suivant :
> > > > > > >
> > > > > > > --------------------------------------------
------
> > > > > > > maitretarot listen on port 3551
> > > > > > >
> > > > > > > ** ERROR **: bind
> > > > > > > aborting...
> > > > > > > ./run_maitretarot: line 7: 24582
> > > >
Aborted                 ../../maitretarot/src/maitretarot
> > > > > > > --------------------------------------------
------
> > > > > > C'est un échec de bind dans make server.
C'est parce
> > > > que le serveur est
> > > > > > parti en sucette sans faire le ménge derière
lui...
> > > > > >
> > > > >
> > > > > c'est grave ? il y a un moyen de rendre les
choses
> > > > > plus propre ?
> > > >
> > > > J'ai pas trop suivi l'affaire.
> > > > N'empeche que man shutdown donne des trucs
interessants.
> > > > Faut pas prendre la page de man de la commande
systeme,
> > > > mais celle de l'appel systeme. Sur le solaris que
j'ai
> > > > sous les pattes la, c'est la section 3N. Sur
Linux, c'est
> > > > probablement 2 ou 3.
> > > >
> > >
> > > la 2
> > >
> > > > Le client peut faire de meme quand il s'apercoit
que la
> > > > connexion vient de planter.
> > > >
> > >
> > > ok, je rajoute ça dès que le reste fonctionne.
> > >
> > > > Et finalement, si vous voulez aller plus loin
(mais je
> > > > vous le deconseille au depart): man setjmp et man
longjmp
> > > >
> > >
> > > oui, les sauts à la goto, on va éviter au depart
(même si
> > > c'est un moyen simple et pas tres propre de gerer
les erreurs).
> >
> > C'est pas un goto. C'est une restauration de
contexte. Utile pour quand
> > ca plante: ca emet un signal. On recupere le signal,
on fait un longjmp,
> > et on sauve tout ce qu'on peut avant de quitter
proprement. C'est
> > probablement comme ca que StarOffice plante, mais en
se permettant de
> > sauvegarder le document proprement avant. Mais bon,
ici, c'est pas
> > pareil.
> >
>
> oops, la prochaine fois, avant de repondre je lirai la
doc :)
>
> J'ai vu que dans le Login hors serie sur le C, ils
utilise ces
> fonctions pour simuler les exeptions comme en Java. un
truc
> du style TRY ... CATCH ... . Ben, je ne sais pas si
c'est une
> bonne idée parce que ça rajoute ~20 lignes pour gerer
une
> exeption de division par zero là où un simple test sur
le
> diviseur (== 0) suffit.

Pour le cas que tu cites, t'as raison, et pour les cas
similaires aussi. On programme pas comme un porc en
disant "y'a setjmp en cas de pb".

Par contre, on peut programmer avec setjmp en considerant
que setjmp valide un etat. On n'est pas parfait: on peut
quand meme laisser des bugs dans un prog. setjmp valide
un etat, et si un bug se manifeste, il faut pouvoir
tracer au maximum, mais parallelement, longjmp peut nous
remettre au dernier etat valide.

Aucun rapport avec try/catch qui n'est rien d'autre a mon
avis que:

retour = appel_de_fonction(arguments);
if(try(retour)) {
/* OK */
} else {
  catch(retour);
}

Et ici, try est une fonction qui teste la validite de la
variable retour (>0 pour socket par exemple). Et catch
n'est rien d'autre qu'une fonction a executer quand ca
deconne, style un petit message d'erreur avec errno et
eventiellement exit().
Peut-etre meme que c'est pas fait comme ca: errno est
initialise avant l'appel de la fonction. Apres cet appel,
try() teste si errno est a un etat d'erreur.

Enfin voila, je sais pas comment on peut faire try/catch
proprement en C, mais:
- setjmp/longjmp n'ont rien a voir avce try/catch
- glib-2.0 est sortie dimanche et implemente un systeme
try/catch.

Yves

--
homepage - http://ymettier.free.fr                   -
gtktalog - http://www.freesoftware.fsf.org/gtktalog  -
cardpics - http://www.freesoftware.fsf.org/cardpics/ -

--------------
Profitez de l'offre spéciale Tiscali Liberty Surf !
50% de temps en plus pendant 3 mois sur tous les forfaits Internet.

http://register.libertysurf.fr/subscribe_fr/signup.php3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]