ciao a tutti, ho buttato giù l'esercizio però non so se è giusto, qualcuno potrebbe darmi qualche suggerimento? grazie mille!

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>


#define PORT 4000
#define IP "127.0.0.1"



int main(){

struct sockaddr_in server_addr;
int server_addr_len=sizeof(server_addr);

int PORT1=PORT; 

char STRINGA[30];

char NUM[11]; //stringa per memorizzare il numero di tentativi

int sd,i,err,tentativi=0;

//init addr
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons((u_short)PORT1);
server_addr.sin_addr.s_addr=inet_addr(IP);
//end init

sd=socket(AF_INET,SOCK_STREAM,0);

err=connect(sd,(struct sockaddr*)&server_addr,server_addr_len);

if(err<0){ 

		printf("errore: connessione\n"); 

		return 1;
	}

else printf("connessione riuscita"); // qui deve arrivarci perchè il port me lo da il testo

	

while(PORT1!=-1){ // parte il ciclo while

i=0;

do{

	err=recv(sd,&STRINGA[i],1,0);

	if (err<0) { printf("errore in recv: errore ricezione: err<0\n"); 

			return 1; 
			}

	if (err==0) { printf("errore in recv: chiusura connessione: err==0\n"); 

			return 1; 
			}

	i++;

	}while(STRINGA[i-1]!='\n');

printf("stringa ricevuta\n");

PORT1=atoi(STRINGA); //aggiorno il port

printf("stringa convertita\n");

if (PORT1==-1) { 

		printf("stringa convertita: PORT == -1\n");

		break; 

		}


printf("stringa convertita\n");

printf("cambio il port e tento la connessione...\n");

//init addr
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons((u_short)PORT1);
server_addr.sin_addr.s_addr=inet_addr(IP);
//end init

err=connect(sd,(struct sockaddr*)&server_addr,server_addr_len);

if(err<0){ 

		printf("errore: connessione\n"); 

		tentativi++;

		break;

	}

else { 

	printf("connessione riuscita");

	break;

	}

	

}//fine ciclo while		


printf("ciclo completato invio il numero di tentativi...\n");

sprintf(NUM,"%d\n",tentativi);

err=send(sd,NUM,strlen(NUM),0);

if (err<0) { printf("errore in send: err<0\n"); 

			return 1; 
			}
else printf("numero tentativi inviati...termino\n\n");

close(sd);

return 1;


}
l'ho compilato e non dovrebbero esserci errori di sintassi, il problema è la semantica.

grazie ciao