Si manifesta su writen risultato
scritti=writen(file_socket, &risultato, sizeof(long));
if(scritti==-1){
perror("writen risultato");
return;
}
server:
void collector(){
int file_socket;
Sockaddr_un indirizzo_server;
int connessione;
long risultato;
ssize_t letti;
size_t lunghezza;
char* nome=NULL;
Puntatore lista=NULL;
file_socket=socket(AF_UNIX, SOCK_STREAM, 0);
if(file_socket==-1){
perror("socket");
return;
}
memset(&indirizzo_server, '0', sizeof(indirizzo_server));
indirizzo_server.sun_family=AF_UNIX;
strncpy(indirizzo_server.sun_path, NOME_SOCKET, strlen(NOME_SOCKET)+1);
int ritorno;
ritorno=bind(file_socket, (Sockaddr*) &indirizzo_server, sizeof(indirizzo_server));
if(ritorno==-1){
perror("bind");
return;
}
ritorno=listen(file_socket, MAX_CONNESSIONI);
if(ritorno==-1){
perror("listen");
return;
}
while(termina=='n'){
connessione=accept(file_socket, NULL, NULL);
if(errno == EINTR)
break;
if(connessione==-1){
perror("accept");
continue;
}
letti=readn(connessione, &risultato, sizeof(long));
if(letti==-1){
perror("readn risultato");
return;
}
if(risultato==STAMPA){
close(connessione);
stampa(lista);
continue;
}
letti=readn(connessione, &lunghezza, sizeof(size_t));
if(letti==-1){
perror("readn lunghezza");
return;
}
nome=malloc(sizeof(char)*(lunghezza+1));
if(nome==NULL){
perror("malloc");
return;
}
letti=readn(connessione, nome, sizeof(char)*lunghezza);
if(nome==NULL){
printf("nome e' vuoto\n");
}
if(letti==-1){
perror("readn nome");
return;
}
nome[lunghezza]='\0';
if(risultato==FINE){
close(connessione);
free(nome);
break;
}
inserisci(&lista, risultato, nome);
close(connessione);
free(nome);
}
stampa(lista);
distruggi(&lista);
unlink(NOME_SOCKET);
return;
}
client:
void gestisci_connessione(char* nome, long risultato){
size_t lunghezza=strlen(nome);
ssize_t scritti;
int file_socket=socket(AF_UNIX, SOCK_STREAM, 0);
if(file_socket==-1){
perror("socket");
return;
}
int ritorno;
Sockaddr_un indirizzo_server;
memset(&indirizzo_server, '0', sizeof(indirizzo_server));
indirizzo_server.sun_family=AF_UNIX;
strncpy(indirizzo_server.sun_path, NOME_SOCKET, strlen(NOME_SOCKET)+1);
ritorno=connect(file_socket, (Sockaddr*) &indirizzo_server, sizeof(indirizzo_server));
scritti=writen(file_socket, &risultato, sizeof(long));
if(scritti==-1){
perror("writen risultato");
return;
}
if(risultato==FINE){
close(file_socket);
return;
}
if(risultato==STAMPA)
return;
scritti=writen(file_socket, &lunghezza, sizeof(size_t));
if(scritti==-1){
perror("writen lunghezza");
return;
}
scritti=writen(file_socket, nome, sizeof(char)*lunghezza);
if(scritti==-1){
perror("writen nome");
return;
}
close(file_socket);
}