PIR/Serveur.c

89 lines
2.3 KiB
C

/* déclaration des types de base */
#include <sys/types.h>
/* constantes relatives aux domaines, types et protocoles */
#include <sys/socket.h>
/* constantes et structures propres au domaine INTERNET */
#include <netinet/in.h>
/* structures retournées par les fonctions de gestion de la base de
données du réseau */
#include <netdb.h>
/* pour les entrées/sorties */
#include <stdio.h>
/* la lib standard */
#include <stdlib.h>
/* pour le fork */
#include <unistd.h>
void print_nb_connexions(int nb_connexions) {
if (nb_connexions == 1) {
printf("Nouvelle connexion, 1ere connexion\n");
} else if (nb_connexions == 2) {
printf("Nouvelle connexion, 2nd connexion\n");
} else {
printf("Nouvelle connexion, %deme connexion\n", nb_connexions);
}
printf("L'adresse du nombre de connexions est : %p\n", &nb_connexions);
}
int main(int argc, char * argv[])
{
if (argc != 2) {
printf("ERREUR : Usage : ./serveur N°Port\n");
exit(2);
}
// On crée le socket local
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
printf("ERREUR lors de la création du socket\n");
exit(1);
}
// On cree l'adresse du socket local
struct sockaddr_in addr_local;
int binder;
addr_local.sin_family = AF_INET;
addr_local.sin_port = atoi(argv[1]);
addr_local.sin_addr.s_addr = INADDR_ANY;
//On bind l'adresse du socket créee avec le socket local
binder = bind(sock,(struct sockaddr *) &addr_local, sizeof(struct sockaddr_in));
if (binder == -1){
printf("ERREUR lors du bind du socket\n");
exit(1);
}
//Initialisation file d'attente
listen(sock, 100);
// Variable de stockage de l'addresse emmeteur
struct sockaddr_in addr_em;
unsigned int longueur_addr_em = sizeof(struct sockaddr_in);
// On se met en état d'acceptation de connexion (et on crée un socket en passant)
int pid = 1;
int nb_connexions = 0;
while (pid != 0){
int sock_connexion = accept(sock, (struct sockaddr *)&addr_em, &longueur_addr_em);
nb_connexions++;
pid = fork();
if (pid == -1){
printf("ERREUR lors du fork\n");
exit(1);
} else if (pid == 0) {
if (sock_connexion == -1) {
printf("ERREUR lors de l'acceptation de la connexion\n");
exit(1);
} else {
print_nb_connexions(nb_connexions);
}
}
}
return 0;
}