Server multiclients, accept() : Invalid argument
2 participants
Page 1 sur 1
Server multiclients, accept() : Invalid argument
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 :
megatalk.c :
init_socket.c
clients.c :
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 !
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
Re: Server multiclients, accept() : Invalid argument
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.
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|