/* déclaration des types de base */ #include /* constantes relatives aux domaines, types et protocoles */ #include /* constantes et structures propres au domaine INTERNET */ #include /* structures retournées par les fonctions de gestion de la base de données du réseau */ #include /* pour les entrées/sorties */ #include /* la lib standard */ #include /* pour le fork */ #include 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; }