Ho diversi problemi con il seguente programma, che deve far comunicare 2 processi tramite socket.
SERVER:
codice:
	while(1){
		connfd=accept(listenfd,(struct sockaddr*) &client,(socklen_t *)sizeof(client));
		pid=fork();
		if(pid!=0){/*processo padre*/
			sleep(1);
			close(connfd);
		}else{/*processo figlio*/
			char buffer[50];
			int carta;
			int colla;
			int ink;
			close(listenfd);
			//comunicazione tramite connfd
			printf("SERVER:connessione accettata, commesso in attesa\n");
			//il commesso attende la richiesta dalla tipografia
			read(connfd,&buffer,sizeof(buffer));
			printf("COMMESSO: ordine ricevuto(%s)\n",buffer);
			carta = strcmp(buffer,"carta");
			colla = strcmp(buffer,"colla");
			ink = strcmp(buffer,"ink");
			if(carta==0){
				write(connfd,"100carta",8);
				read(connfd,&buffer,sizeof(buffer));
				printf("COMMESSO: pagamento ricevuto.(%s)\n",buffer);
			}else if(colla==0){
					write(connfd,"100colla",8);
					read(connfd,&buffer,sizeof(buffer));
					printf("COMMESSO: pagamento ricevuto.(%s)\n",buffer);
				}else if(ink==0){
						write(connfd,"100ink",6);
						read(connfd,&buffer,sizeof(buffer));
						printf("COMMESSO: pagamento ricevuto.(%s)\n",buffer);
					}
			
			close(connfd);
			printf("COMMESSO: connessione chiusa.\n");
			exit(0);
			}
	}
CLIENT:(riporto solo 1 dei 3 casi di comunicazione, tanto sono uguali)

codice:
while(1){
				completato=consuma(&tipografia[ID].carta,&tipografia[ID].colla,&tipografia[ID].ink);
				if(completato==0){
					printf("Lavoro eseguito con successo da Tipografia %d:\n",ID+1);
					printf("Rimanenze:\n-carta->%d\n-colla->%d\n-ink->%d\n",tipografia[ID].carta,tipografia[ID].colla,tipografia[ID].ink);
					sleep(3);
				}else{
					switch (completato){
						case -1:{
							printf("Tipografia %d: Carta terminata.\n",ID+1);
							//creo il socket(ricordati di chiuderlo!!!)
							int sockfd;
							
							if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
								perror("Errore nella creazione della socket");
								exit(1);
								}
							if (connect(sockfd, (struct sockaddr *) &server, sizeof server) == -1){
								perror("Errore nella connessione al socket");
								exit(1);
								}
							printf("Tipografia %d: connessione accettata(Richiedo carta).\n", ID+1);
							
							write(sockfd,"carta",sizeof(buffer));
							read(sockfd,&buffer,sizeof(buffer));
							printf("Tipografia %d: consegna ricevuta.(%s)\n",ID+1,buffer);
							tipografia[ID].carta=tipografia[ID].carta+100;
							write(sockfd,"pagamento carta",15);
							printf("Tipografia %d: pagamento effettuato.\nChiudo connessione.\nRiprendo produzione.",ID+1);
							close(sockfd);
							break;
						}......
1: il commesso riceve un messaggio che stampato a video è incomprensibile(serie di simboli), quando il massaggio passato era la semplice stringa "carta". Devo effettuare la codifica/decodifica?
2:essendo il messaggio incomprensibile il commesso non entra in nessuno dei casi IF e mi stampa Connessione chiusa(fin qui tutto apposto). Il Client stampa a video "Consegna ricevuta(anch'esso una serie di caratteri non codificati)" come se il server avesse effettuato la write di spedizione successiva alla read dell'ordine, dopo aver effettuato i vari strcmp. Ovviamente il client si blocca perchè l'ultima write(del pagamento) non trova nessuna socket aperta dall'altra parte(e non dovrebbe darmi un errore invece che bloccarsi?)

Quali possono essere i problemi?

Sto impazzendo con queste benedette socket