====== Stabilire se un server tcp accetta connessioni su una data porta ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 09/01/2021 - 00:21 //** // // La funzione ritorna 1 se il server accetta connessioni e 0 altrimenti. ===== Se il server non รจ localhost ===== Funziona anche su localhost. Sempre che il server accetti piu' di una connessione. #include #include #include #include #include int serverIsUp(const char* host, int port) { int sd; struct sockaddr_in client; struct hostent *hp; hp = gethostbyname(host); bzero(&client, sizeof(client)); client.sin_family = AF_INET; client.sin_port = htons(port); client.sin_addr.s_addr =((struct in_addr*)(hp->h_addr))->s_addr; if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) printf("Errore nella creazione del socket!\n"); else printf("socket creato!\n"); if (connect(sd, (struct sockaddr *)&client, sizeof(client)) == 0){ printf("Server is UP!\n"); close(sd); return 1 ; }else{ printf("Server is DOWN!\n"); close(sd); return 0; } } ===== Server su localhost ===== Da usare solo su localhost. Anche su server che accettano solo una connessione. #include #include #include #include #include int serverIsUp(int port) { struct sockaddr_in server; int sd; if ( (sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) printf("Errore nella creazione del socket!\n"); server.sin_family = AF_INET; server.sin_port = htons(port); server.sin_addr.s_addr = INADDR_ANY; if (bind(sd, (struct sockaddr *)&server, sizeof(server)) < 0) { printf("Server is UP!\n"); close(sd); return 1; }else{ printf("Server is DOWN!\n"); close(sd); return 0; } close(sd); }