Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Aliexpress : codes promo valables sur tout le site
Voir le deal

Server multiclients, accept() : Invalid argument

2 participants

Aller en bas

Server multiclients, accept() : Invalid argument Empty Server multiclients, accept() : Invalid argument

Message  Akiat Mer 16 Mar 2011 - 0:42

Bonjour,

Tout d'abord un grand bravo pour les tutoriaux de ce site, qui sont très bien faits !

J'ai toutefois une erreur de socket incompréhensible, j'ai créer un "minichat" mono client, et je m'appretais a faire un multi clients a l'aide de thread... Mais malheuresement je reste bloqué sur une erreur que je n'arrive pas a corrigée...

Voila mon code, mon main appel la fonction megatalk.

L'erreur est donc au niveau de l'accept qui me dit "accept() : Invalid argument" (Pas a la compil on est d'accord :p)

Les fonction "xsocket()" "xaccept()" etc sont juste des "socket()" "accept()" mais avec des verifications d'erreurs.

J'espere que vous pourrez m'aider... Voici le code:

st_client.h :
Code:

#ifndef ST_CLIENTS_H_
#define ST_CLIENTS_H_
 
#define MAX_SOCKET 5
 
typedef struct sockaddr_in SOCKADDR_IN;
typedef const struct sockaddr SOCKADDR;
typedef socklen_t SOCKLEN;
typedef int SOCKET;
 
typedef struct  st_clients
{
  pthread_t    thread;
  SOCKET        sock;
  SOCKADDR_IN  sin;
  int          sin_size;
}              st_clients;
 
#endif /* ST_CLIENTS_H_ */

megatalk.c :

Code:
void                                   megatalk(int server_port)
{
  SOCKADDR_IN      sin;
  SOCKET                      sock;
 
  sock = xsocket(AF_INET, SOCK_STREAM, 0);
  init_socket(sock, &sin, server_port);
  clients(sock, server_port);
  printf ("closing socket %d...\n", sock);
  close(sock);
  printf ("The socket is now closing\n");
}

init_socket.c
Code:
void                     init_socket(SOCKET sock, SOCKADDR_IN *sin, int server_port)
{
  struct protoent     *proto;
 
  proto = getprotobyname("TCP");
  /* On creer le socket */
  sock = xsocket(AF_INET, SOCK_STREAM, proto->p_proto);
  printf ("socket %d is now opened in TCP/IP mode\n", sock);
  /* On remplit la struct du socket */
  sin->sin_family = AF_INET;
  sin->sin_port = htons(server_port);
  sin->sin_addr.s_addr = htonl(INADDR_ANY);
  /* On nome le socket (On lui attribue une adresse) */
  xbind(sock, (SOCKADDR *)sin, sizeof(*sin));
  xlisten(sock, 5);
  printf("Listening on port %d...\n", server_port);
}

clients.c :

Code:
void                   clients(SOCKET sock, int server_port)
{
  st_clients   *s_client;
 
  while (42)
    {
      printf("waiting for a client connection on port %d...\n", server_port);
      s_client = my_xmalloc_bzero(sizeof(*s_client));
      s_client->sin_size = sizeof(s_client->sin);
      s_client->sock = xaccept(sock, (struct sockaddr *)&s_client->sin,
               (SOCKLEN *)&s_client->sin_size);
      printf("client connected with socket %d from %s:%d\n", s_client->sock,
       inet_ntoa(s_client->sin.sin_addr), htons(s_client->sin.sin_port));
      /* Thread creation */
      pthread_create(&s_client->thread, NULL, client_thread, s_client);
      s_client = NULL;
    }
}


Voila, j'espere que vous pourrez m'aider !

En tout cas merci par avance, et si vous avez des commentaire sur le code (et a mon avis il doit y en avoir :p) dites le moi !

Akiat

Messages : 1
Date d'inscription : 16/03/2011

Revenir en haut Aller en bas

Server multiclients, accept() : Invalid argument Empty Re: Server multiclients, accept() : Invalid argument

Message  -ed- Dim 27 Mar 2011 - 2:24

Ce code n'est pas du tout compilable. Il faut poster l'intégralité du code (tous les fichiers), car on ne sait pas d'où vient l'erreur.
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser