Ho un problema, in pratica quando vado ad avviare client e server sembra andare tutto bene quando digito però una scelta dal client me la fa vedere e dp se voglio fare altro si blocca e mi dice che c'è un errore sulla bind ..mi sapete dire il perchè? C'è qualcosa di errato nella creazione del server? Ecco il codice relativo alla creazione della socket :
codice:
void crea_socket()
{
int listenfd, connfd,ls_result,prezzo_prodotto_scelto,scelta_effettuata, acquisto;
struct sockaddr_in servaddr;
socklen_t sin_size;
short port;
listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (listenfd < 0)
printf("Server: errore nella creazione della socket.\n");
else
printf("La Listening Socket e' partita\n");
port=4000;
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
if (bind(listenfd,(struct sockaddr *) &servaddr, sizeof(struct sockaddr_in)) < 0)
printf("Server: errore durante la bind.\n"); //Rilevamento dell'eventuale errore durante la bind
ls_result = listen(listenfd, SOMAXCONN);
if (ls_result < 0)
printf("Server: errore durante la listen.\n"); //La listen non è riuscita
else
printf("La Socket e' in Ascolto\n");
sin_size = sizeof(struct sockaddr_in);
acquisto = 0;
connfd = accept(listenfd, (struct sockaddr*) &servaddr, &sin_size);
recv(connfd, (char *)&scelta_effettuata, sizeof(int), 0);
printf("Messaggio Arrivato: %d \n", scelta_effettuata);
prezzo_prodotto_scelto = 0;
if (scelta_effettuata == 1)
invia_prodotti (connfd, acquisto);
if (scelta_effettuata == 2)
invia_prod_da_prenotare (connfd, acquisto, prezzo_prodotto_scelto);
if (scelta_effettuata == 3)
{
acquisto = 1;
invia_prodotti (connfd, acquisto);
}
}