1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
memset((char*) &remoteAddress, 0x0, sizeof(struct sockaddr_in));
remoteAddress.sin_family = AF_INET;
remoteAddress.sin_port = htons(DEFAULT_PORT);
globale.listen_socket = socket (AF_INET, SOCK_STREAM, 0);
if(globale.listen_socket < 0)
{
printf("socket() failed with code %d \n", globale.listen_socket);
return 0;
}
sock_rc = bind(globale.listen_socket, (struct sockaddr*) &remoteAddress, sizeof(remoteAddress));
if(sock_rc != 0)
{
printf("bind () failed with code %d\n", sock_rc);
return 0;
}
sock_rc = listen(globale.listen_socket, 5);
if(sock_rc < 0)
{
printf("listen() failed with code %d\n", sock_rc);
return 0;
}
while(continuer)
{
// on aloue de la mémoire (partagée? je ne sais plus) avec memset()
memset((char*) &remoteAddress, 0x0, sizeof(struct sockaddr));
remoteAddressLength = sizeof(remoteAddress);
// on écoute les demandes de connexions
server_socket = accept(globale.listen_socket, (struct sockaddr*) &remoteAddress, &remoteAddressLength);
if(server_socket < 0)
{
printf("accept() failed with code %d\n", server_socket);
return 0;
}
else
{
// quand un client se connecte, on démarre le thread qui va s'occuper de le gérer
globale.client[globale.nombre_client].socket = server_socket; // garde le socket en mémoire pour que le serveur puisse fermer la connexion de tous les clients connectés
if(pthread_create(&tid[globale.nombre_client], NULL, TraitementConnexion, (void*)(globale.nombre_client)) == 1)
{
printf("Erreur lors de la creation du thread\n");
return 0;
}
globale.nombre_client++;
}
} |