Barra laterale

programmazione:c:server_is_up

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 <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
 
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 <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
 
 
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);
 
}

programmazione/c/server_is_up.txt · Ultima modifica: 09/01/2021 - 10:47 da Fabio Di Matteo