comments and perror for serverWorker.c
This commit is contained in:
@ -19,7 +19,7 @@
|
||||
|
||||
int parser(int len, char *command, queueT *queue, long fd_c, taglia_t* taglia, pthread_mutex_t *lock, waiting_t **waiting);
|
||||
|
||||
// funzione eseguita dal Worker thread del pool
|
||||
// worker function
|
||||
void threadF(void *arg) {
|
||||
if(!arg){
|
||||
errno = EINVAL;
|
||||
@ -37,6 +37,7 @@ void threadF(void *arg) {
|
||||
pthread_mutex_t *lock = argl->lock;
|
||||
waiting_t **waiting = argl->waiting;
|
||||
|
||||
// search for the id of the thread
|
||||
int myid = -1;
|
||||
pthread_t tid = pthread_self();
|
||||
|
||||
@ -54,10 +55,10 @@ void threadF(void *arg) {
|
||||
while(*quit == 0) {
|
||||
tmpset=set;
|
||||
int r;
|
||||
// ogni tanto controllo se devo terminare
|
||||
// check if we need to quit
|
||||
struct timeval timeout={0, 100000}; // 100 milliseconds
|
||||
if ((r=select(connfd+1, &tmpset, NULL, NULL, &timeout)) < 0) {
|
||||
perror("Select");
|
||||
perror("threadF: select");
|
||||
break;
|
||||
}
|
||||
if (r==0) {
|
||||
@ -71,9 +72,9 @@ void threadF(void *arg) {
|
||||
// comunicate with the client
|
||||
msg_t str;
|
||||
long n;
|
||||
// leggo la dimensione del messaggio
|
||||
// read the size of the message
|
||||
if ((n=readn(connfd, &str.len, sizeof(long))) == -1) {
|
||||
perror("read1");
|
||||
perror("threadF: readn, dimension");
|
||||
goto _cleanup;
|
||||
}
|
||||
|
||||
@ -84,34 +85,34 @@ void threadF(void *arg) {
|
||||
|
||||
str.str = calloc(str.len+1, sizeof(char));
|
||||
if (!str.str) {
|
||||
perror("calloc");
|
||||
fprintf(stderr, "Calloc.\n");
|
||||
perror("threadF: calloc");
|
||||
goto _cleanup;
|
||||
}
|
||||
// leggo il messaggio
|
||||
// read the message
|
||||
if ((n=readn(connfd, str.str, str.len * sizeof(char))) == -1) {
|
||||
perror("read2");
|
||||
perror("threadF: readn, message");
|
||||
free(str.str);
|
||||
goto _cleanup;
|
||||
}
|
||||
str.str[str.len] = '\0';
|
||||
|
||||
closeConnection:
|
||||
if(n==0 || strncmp(str.str, "quit", 5) == 0) { // il client vuole chiudere la connessione
|
||||
// the clients wants to disconnect or already diconnected
|
||||
if(n==0 || strncmp(str.str, "quit", 5) == 0) {
|
||||
close(connfd);
|
||||
|
||||
long close = -1;
|
||||
// comunico al manager che ho chiuso la connessione
|
||||
// tell main that the client disconnected
|
||||
if (writen(request_pipe, &close, sizeof(long)) == -1) {
|
||||
perror("writen");
|
||||
perror("threadF: writen");
|
||||
goto _cleanup;
|
||||
}
|
||||
// log chiusura connessione
|
||||
// log closing connection
|
||||
int n = 0;
|
||||
char buf[1024];
|
||||
n = snprintf(buf, sizeof(buf), "Chiusa connessione con il client %ld.\n", connfd);
|
||||
if( n<0 ) {
|
||||
perror("snprintf");
|
||||
perror("threadF: snprintf");
|
||||
goto _cleanup;
|
||||
}
|
||||
if( taglia_log(taglia, buf) < 0 )
|
||||
@ -119,22 +120,23 @@ closeConnection:
|
||||
goto _cleanup;
|
||||
}
|
||||
|
||||
// eseguo quello che mi chiede il client di fare
|
||||
// execute what the client requested
|
||||
if (parser(str.len, str.str, q, connfd, taglia, lock, waiting) == -1) {
|
||||
goto _cleanup;
|
||||
}
|
||||
// str.str non è più valido perchè parser fa free
|
||||
// str.str is not valid anymore because parser frees
|
||||
|
||||
// comunico al manager che è stata servita la richiesta
|
||||
// tell main that the request has been handled
|
||||
if (writen(request_pipe, &connfd, sizeof(long)) == -1) {
|
||||
perror("writen");
|
||||
perror("threadF: writen");
|
||||
}
|
||||
// log
|
||||
|
||||
// write to logfile
|
||||
int m = 0;
|
||||
char buf[1024];
|
||||
m = snprintf(buf, sizeof(buf), "Thread %d ha servito una richiesta del client %ld.\n", myid, connfd);
|
||||
if( m<0 ) {
|
||||
perror("snprintf");
|
||||
perror("threadF: snprintf");
|
||||
goto _cleanup;
|
||||
}
|
||||
if( taglia_log(taglia, buf) < 0 )
|
||||
@ -155,9 +157,10 @@ int parser(int len, char *command, queueT *queue, long fd_c, taglia_t* taglia, p
|
||||
return -1;
|
||||
}
|
||||
|
||||
// copy command because we modify it later
|
||||
char *string = calloc(1, len+1);
|
||||
if(string == NULL) {
|
||||
perror("calloc");
|
||||
perror("parser: calloc");
|
||||
return -1;
|
||||
}
|
||||
strncpy(string, command, len);
|
||||
@ -251,7 +254,7 @@ int parser(int len, char *command, queueT *queue, long fd_c, taglia_t* taglia, p
|
||||
removeFile(token2, queue, fd_c, taglia, lock, waiting);
|
||||
goto _parser_end;
|
||||
}
|
||||
// se arrivo qui non ho riconosciuto il comando
|
||||
// if here no match
|
||||
|
||||
_parser_cleanup:
|
||||
free(command);
|
||||
|
||||
Reference in New Issue
Block a user