{"id":21001226,"url":"https://github.com/waxdred/exam_rank_06","last_synced_at":"2025-08-02T21:08:06.277Z","repository":{"id":150183991,"uuid":"622904733","full_name":"waxdred/exam_rank_06","owner":"waxdred","description":"Exam 42 rank 06","archived":false,"fork":false,"pushed_at":"2023-04-05T06:19:47.000Z","size":45,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-25T04:42:26.180Z","etag":null,"topics":["42","42born2code","42school","c","exam"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/waxdred.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-03T09:52:43.000Z","updated_at":"2023-11-14T21:30:35.000Z","dependencies_parsed_at":"2023-04-19T13:56:10.598Z","dependency_job_id":null,"html_url":"https://github.com/waxdred/exam_rank_06","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/waxdred/exam_rank_06","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waxdred%2Fexam_rank_06","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waxdred%2Fexam_rank_06/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waxdred%2Fexam_rank_06/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waxdred%2Fexam_rank_06/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/waxdred","download_url":"https://codeload.github.com/waxdred/exam_rank_06/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waxdred%2Fexam_rank_06/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268454334,"owners_count":24253156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42","42born2code","42school","c","exam"],"created_at":"2024-11-19T08:14:15.311Z","updated_at":"2025-08-02T21:08:06.179Z","avatar_url":"https://github.com/waxdred.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 42 exam_rank_06\n## Introduction\nCe projet est une implémentation d'un chatroom. Le serveur accepte des connexions des clients et leur permet de communiquer entre eux.\n\nLe programme est écrit en C et utilise les sockets pour la communication en réseau. Le code est modulaire et contient plusieurs fonctions pour gérer les connexions et les messages entrants.\n\n## usage\nCompilation est execution du programme sur le port ```8888```:\n```fish\ngcc -Wall -Wextra -Werror main.c -o server \u0026\u0026 ./server 8888\n```\nConnection au server\n```fish\nnc localhost 8888\n```\n\n## Fonctionnement\nL'exécution du serveur se fait avec la commande ./server port où port est le numéro du port sur lequel le serveur doit écouter les connexions entrantes.\n\nUne fois lancé, le serveur se met en attente de connexions des clients. Les clients peuvent se connecter en utilisant la commande telnet localhost port. Une fois connecté, les clients peuvent envoyer des messages qui seront envoyés à tous les autres clients connectés.\n\n## Architecture du code\nLe code est divisé en plusieurs parties :\n\n## Structures\nLe code utilise une structure t_client pour stocker les informations des clients connectés. La structure contient les champs suivants :\n\n- ```fd``` : le descripteur de fichier correspondant à la socket du client.\n- ```id``` : l'identifiant du client, qui est équivalent à son numéro d'ordre de connexion.\n- ```new``` : un indicateur pour savoir si le client est nouveau ou non. Utile pour afficher des messages différents pour les nouveaux clients.\n- ```next``` et prev : des pointeurs vers les clients suivants et précédents dans la liste doublement chaînée.\n\n## Variables globales\nLe code utilise plusieurs variables globales pour gérer les connexions et les messages :\n\n- ```sockfd``` : le descripteur de fichier correspondant à la socket du serveur.\n- ```fd_max``` : le numéro maximum de descripteurs de fichiers utilisés. C'est utile pour déterminer la valeur de retour de la fonction ```select()```.\n- ```tokenBuff``` : un tampon utilisé par la fonction ```ft_strtok()``` pour stocker le jeton analysé.\n- ```pool_set```, read_set et write_set : des ensembles de sockets utilisés par la fonction ```select()``` pour détecter les activités de lecture et d'écriture.\n- ```clients``` : un pointeur vers la liste doublement chaînée des clients connectés.\n\n## Fonctions\nLe code utilise plusieurs fonctions pour gérer les connexions et les messages :\n\n- ```Wrong()``` : fonction pour afficher un message d'erreur en cas d'argument invalide.\n- ```Fatal()``` : fonction pour afficher un message d'erreur en cas d'erreur fatale.\n- ```ft_strchr()``` : fonction pour rechercher un caractère dans une chaîne.\n- ```ft_strtok()``` : fonction pour extraire des jetons d'une chaîne.\n- ```get_fd_max()``` : fonction pour obtenir le numéro maximum de descripteurs de fichiers utilisés.\n- ```send_all()``` : fonction pour envoyer un message à tous les clients connectés, sauf à l'émetteur.\n- ```addClient()``` : fonction pour ajouter un client à la liste doublement chaînée des clients connectés.\n- ```add_client()``` : fonction pour ajouter un nouveau client à la liste des clients connectés.\n- ```get_client()``` : fonction pour obtenir un pointeur vers un client à partir de son descripteur de fichier.\n- ```msg()``` : fonction pour gérer les messages entrants des clients.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaxdred%2Fexam_rank_06","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwaxdred%2Fexam_rank_06","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaxdred%2Fexam_rank_06/lists"}