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

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

Re: [Maitretarot-devel-fr] test de libmaitretarot


From: Yves Mettier
Subject: Re: [Maitretarot-devel-fr] test de libmaitretarot
Date: Sun, 12 May 2002 20:04:57 +0200

Coucou!

Je mets libmaitretarot a jour.
Attention: j'ai change le protocole de la fonction. Je sens que tu vas
pas aimer!!!
Mais ma modification ne te force pas a te mettre a jour: ta fonction et
la mienne portent un nom different, et les constantes de l'enum portent
aussi des noms differents. Donc t'es pas oblige de mettre ca en priorite
haute.

En attendant, voici mes modifs.
Le prototype:

gint libmt_connect_to_socket (gchar * ip, guint16 port, GError **
error);

Renvoie un entier positif ou nul comme avant si tout va bien. Renvoie -1
sinon (et plus tes constantes. Niark)
Par contre, il y a un troisieme argument, GError **error, qui sert a
recuperer ton code d'erreur, et plus si affinites!
Voici comment ca marche (inspire de la doc de glib):

GError *err = NULL;

sock = libmt_connect_to_socket ("127.0.0.1", 3551, &err);
g_assert ((sock == -1 && err != NULL) || (sock >= 0 && err == NULL));
if (err != NULL)
  {
    /* Report error to user, and free error */
    g_assert (sock == -1);
    fprintf (stderr, "Could not connect to server (%s)\n",
err->message);
    g_error_free (err);
  } 
else
  {
    /* Use file contents */
    g_assert (sock >= 0);
  }



Si ca c'est pas de la gestion d'erreur!!!
Et en plus, ca me semble simple. Vire tous les g_assert et les
commentaires: il ne reste plus que 5 lignes!



Un dernier mot sur libmaitretarot:
On va la tester un moment pour savoir si c'est OK. Avant que ce ne soit
OK, on se met d'accord pour faire des modifs et on les fait. Apres,
quand c'est OK, il faudra vraiment se mettre d'accord pour faire la
moindre modification dans libmaitretarot. Et quand c'est OK, je
considere qu'on pourra aussi l'installer dans /usr. C'est pour ca qu'il
faudra pas faire ce qu'on veut apres.

En attendant, commentaires bienvenus ;-)

Yves


On 12 May 2002 15:38:14 +0200
philippe brochard <address@hidden> wrote:

> 
> Il manque la fonction 
> 
> player.c:52: warning: implicit declaration of function
> `libmt_connect_to_socket'
> 
> dans net.c et net.h (qui est vide d'ailleurs)
> 
> 
> resultat, le client ne peut pas se connecter à la socket.
> 
> voila à quoi elle resemble :
> 
> --- net.c
> -----------------------------------------------------------------[...]
> 
> gint
> connect_to_socket (GString * ip, guint16 port)
> {
>   struct hostent server_address, *address;
>   struct sockaddr_in *client_sockaddr_in;
>   gint sock;
>   gint optval;
> 
>   if ((address = gethostbyname (ip->str)) == NULL)
>     {
>       return (MT_ERROR_SOCKET_GETHOST_FAILED);
>     }
> 
>   memcpy (&server_address, address, sizeof (struct hostent));
> 
>   /* Open the server socket */
> 
>   sock = socket (AF_INET, SOCK_STREAM, 6);
>   if (sock == -1)
>     {
>       return (MT_ERROR_SOCKET_SOCKET_FAILED);
>     }
> 
>   optval = 1;
>   setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof (gint));
> 
>   /* Get infos on the server */
>   if ((client_sockaddr_in = g_malloc (sizeof (struct sockaddr_in))) ==
>   NULL)
>     {
>       return (MT_ERROR_SOCKET_CREATION_FAILED);
>     }
> 
>   client_sockaddr_in->sin_family = server_address.h_addrtype;
>   client_sockaddr_in->sin_port = htons (port);
>   memcpy ((gchar *) & (client_sockaddr_in->sin_addr.s_addr),
>         server_address.h_addr, server_address.h_length);
>   bzero ((gchar *) & (client_sockaddr_in->sin_zero),
>        sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE -
>        sizeof (guint16) - sizeof (struct in_addr));
> 
>   /* Connect to the server as a client */
> 
>   if (connect
>       (sock, (struct sockaddr *) client_sockaddr_in,
>        sizeof (struct sockaddr_in)))
>     {
>       g_free (client_sockaddr_in);
>       return (MT_ERROR_SOCKET_CONNECT_FAILED);
>     }
>   g_free (client_sockaddr_in);
>   return (sock);
> }
> 
> [...]
> ---------------------------------------------------------------------
> ------
> 
> 
> et l'enum pour les erreurs va dans net.h :
> 
> -- net.h
> ------------------------------------------------------------------[..
> .]
> 
> typedef enum {
>   MT_ERROR_SOCKET_GETHOST_FAILED = -1,
>   MT_ERROR_SOCKET_SOCKET_FAILED = -2,
>   MT_ERROR_SOCKET_CREATION_FAILED = -3,
>   MT_ERROR_SOCKET_CONNECT_FAILED = -4 }
> error_socket_e;
> 
> [...]
> ---------------------------------------------------------------------
> ------
> 
> 
> 
> 
> 
> Philippe
> 
> 
> -- 
> ,-------------------.         ,---------------,----------------------.
> | Philippe Brochard |   ...   | address@hidden | http://hocwp.free.fr |
> `------------------(_  (. .)  `---------------'----------------------'
> -------------------ooO--(_)--Ooo--------------------------------------
> 
> _______________________________________________
> Maitretarot-devel-fr mailing list
> address@hidden
> http://mail.freesoftware.fsf.org/mailman/listinfo/maitretarot-devel-fr


-- 
- Homepage - http://ymettier.free.fr                   -
- GPG key  - http://ymettier.free.fr/gpg.txt           -
- MyAM     - http://www.freesoftware.fsf.org/myam      -
- GTKtalog - http://www.freesoftware.fsf.org/gtktalog  -




reply via email to

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