ciao a tutti...

non riesco a capire il xke mi chiude subito il server
se cerco di eseguire il case 2

vi posto qui il mio codice dei vari switch case..e se necessario l'intero codice del programma..

client :

codice:
k: while((choise=comunicazione(conn_s))=='r')
   {
		printf("client:inserire numero valido \n");
   }
	
   switch (choise)
   {
   case '0': exit(0);
	   break;
   case '1':visualizzamappa(conn_s);
	   ;break;
   case '2':
	   char postistr[TEXT_LENGTH];
	   int numposti;
	   puts("inserisci il numero di posti da prenotare");
	   errore=(scanf("%s",postistr));
	   if(errore<0)
	   {	
		   if(WSAGetLastError()==WSAEINTR)
							{
							printf("errore nella scanf");
							SendMessage(HWND_BROADCAST,my_mex_type,0,0);
							exit(-1);// uscita
							}
	   }
	   if(verificastringa(postistr)!=-1)
	   {
			numposti=atoi(postistr);
	   }
	   else numposti=-1;
	   if(numposti<=0|| numposti>127)
	   {
			puts("Errore:	numero posti inserito non valido.al max è possibile prenotare 127 posti,SALA PERMETTENDO");
	   }
	   else 
	   leggiposti( numposti,conn_s);
	   break;
   case '3':disdici(conn_s); 
	   break;
   default: break;
   }

   printf("client:proseguire con un altra operazione? Y per si altro per no: ");

   fgets(buffer,MAX,stdin);
   if(buffer[0]=='y' || buffer [0]=='Y')
   {
		if(send(conn_s,"y",sizeof(buffer),0)==-1)
		{
				if(WSAGetLastError()==WSAEHOSTDOWN)
				{
						printf("client:errore nella send");
						SendMessage(HWND_BROADCAST,my_mex_type,0,0);
						system("PAUSE");
						exit(-1);
				}
		}
		system("PAUSE");
		goto k;
   }
   system("PAUSE");
   WSACleanup();
   }
e del server :

codice:
switch (choise)
{


				// esci
			case 0: printf("uscita \n");
				send (conn,"0",strlen(buffer),0); //strlen restituisce lunghezza della stringa

				//chiusura del socket
				if(closesocket(conn) ==SOCKET_ERROR)
				{
						fprintf(stderr,"server :errore nella chiusura del socket");
						exit(EXIT_FAILURE);
				}

				//rimuovo il file alla chiusura

				remove("codici");
				remove("mappa");

				//terminazione dell utilizzo di Windows Socket per tutti i thread

				WSACleanup();
				exit(0);
			break;


			//visualizzare la mappa
		case 1: 
				if(priorita==0 ||priorita==2)
				{
						char postidainv[dim1*dim2];
						matrixtoposti(postidainv);
						send(conn,postidainv,dim1*dim2,0);
				send(conn,"1",strlen(buffer),0);
				}
				else
					{
						send(conn,"r",MAX,0);
						goto k;
						break;
					}
				caricamappa();
		break;


			//prenotare i posti

		case 2:
			
			
		if(priorita ==1 || priorita ==2)
		{
			int t=0;
			char risp[7];
			int numposti=(int) buffer[1];
			char buffer2[1000];
			int r=recv(conn,buffer2,sizeof(buffer2),0);
			if(r==0|| r==-1)
			{
					if(WSAGetLastError()==WSAEINTR)
					{
						// SE ERRORE DOVUTO AD UNA INTERRUZIONE

						SendMessage(NULL,my_mex_type,0,0);
						//invio messaggio indicante errore nella comunicazione
					}
			}
			int s;
			while(t<numposti)
			{
					s=occupaposto((buffer2[t*2])-1,(buffer2[1+(t*2)])-1);
					risp[5]=buffer2[t*2];
					risp[6]=buffer2[1+(t*2)];
					if(s==-2)
					{
						//posto non disponibile
							risp[0]='Y';
							risp[1]='Y';
							risp[2]='Y';
							risp[3]='Y';
					}
					else 
						if(s==-1)
						{
								//posto è occupato
							risp[0]='E';
							risp[0]='E';
							risp[0]='E';
							risp[0]='E';
						}
						else
						{
								//posto libero
							errore=sprintf(risp,"%d",s);
							if(errore<0)
							{
								if(WSAGetLastError()==WSAEINTR)
								{
										SendMessage(HWND_BROADCAST,my_mex_type,0,0);
										exit(-1);
								}
							}
						}
						send(conn,risp,7,0);
						t++;
			} //chiude il while


					send(conn,"2",strlen(buffer),0);
		}
			else
				{
					send(conn,"r",MAX,0);
					goto k;
					break;
				}
				caricacodici();
		break;


			//disdire i posti

		case 3:
		if(priorita==1 || priorita ==2)
		{
			if(buffer[1]=='C')
			{
					int cod;
					char codice[4];
					if(recv(conn,codice,sizeof(codice),0)<0)
					{
							printf("impossibile leggere il messaggio");
							if(WSAGetLastError()==WSAEINTR)
							{
									SendMessage(HWND_BROADCAST,my_mex_type,0,0);
										exit(-1);
							}
					}
					sscanf(codice,"%d",&cod);
					char postodadisdire[2];
					if(recv(conn,postodadisdire,sizeof(postodadisdire),0)<0)
					{
							if(WSAGetLastError()==WSAEINTR)
							{
									SendMessage(HWND_BROADCAST,my_mex_type,0,0);
										exit(-1);
							}
					}
					int s=liberaposto(cod,(postodadisdire[0])-1,(postodadisdire[1])-1);
					char risp[2];
					if(s==1)
					{
							risp[0]='1';   //1 indica prenotazione disdetta
							risp[1]='1';
							send(conn,risp,sizeof(risp),0);
					}
					else
					{
							risp[0]='E'; //con E indico che è occupato
							risp[1]='E'; 
					}

					send(conn,"3",strlen(buffer),0);
			}
		}
			else 
				{
					send(conn,"r",MAX,0);
					goto k;
					break;
				}
			salvamappa(conn);
			salvacodici();
		break;

		default: break;
} // chiude lo switch