/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tomoron +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/24 00:03:56 by tomoron #+# #+# */ /* Updated: 2025/08/15 02:14:40 by tomoron ### ########.fr */ /* */ /* ************************************************************************** */ #include "includes/ft_ping.h" int g_stop = 0; void show_help(t_settings *set) { set->stop = 1; printf("Usage: %s %s", set->name, HELP_MESSAGE); } int init_socket(char *name) { int res; res = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if(res == -1) { if(errno == EPERM) fprintf(stderr, "%s: socket creation permission denied, make sure you are runing as root\n", name); else fprintf(stderr, "%s: can't initialize socket\n", name); return(-1); } return(res); } uint16_t get_id(void) { struct timeval time; uint16_t res; gettimeofday(&time,0); res = (uint8_t)time.tv_sec; res |= (uint8_t)time.tv_usec << 8; return(res); } void signal_handler(int signum) { (void)signum; g_stop = 1; } int main(int argc, char **argv) { t_settings settings; signal(SIGINT, signal_handler); settings.name = argv[0]; if(parse_args(argc, argv, &settings)) return(1); settings.id = get_id(); if(!settings.err && !settings.stop) settings.socket = init_socket(argv[0]); if(settings.stop || settings.err || settings.socket == -1) { if(settings.socket != -1) close(settings.socket); free_hosts(settings.hosts); return((settings.err != 0) * 64); } send_pings(&settings); if(settings.socket != -1) close(settings.socket); free_hosts(settings.hosts); return(0); }