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);
}

}