|
|
@ -11,18 +11,19 @@ |
|
|
#include "queue.h" |
|
|
#include "queue.h" |
|
|
#include "util.h" |
|
|
#include "util.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sig_atomic_t misses = 0; |
|
|
sig_atomic_t misses = 0; |
|
|
sig_atomic_t hits = 0; |
|
|
sig_atomic_t hits = 0; |
|
|
sig_atomic_t connections = 0; |
|
|
sig_atomic_t connections = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void* worker(void* arg){ |
|
|
void* worker(void* arg){ |
|
|
FILE* fp = (FILE*) arg; |
|
|
|
|
|
|
|
|
FILE* client = (FILE*) arg; |
|
|
|
|
|
|
|
|
char buffer[100]; |
|
|
char buffer[100]; |
|
|
++connections; |
|
|
++connections; |
|
|
int status; |
|
|
int status; |
|
|
while(fgets(buffer, sizeof(buffer), fp)){ |
|
|
|
|
|
|
|
|
while(fgets(buffer, sizeof(buffer), client)){ |
|
|
int last = strlen(buffer) - 1; |
|
|
int last = strlen(buffer) - 1; |
|
|
for(; last > 0; --last){ |
|
|
for(; last > 0; --last){ |
|
|
if(buffer[last] == '\r' || buffer[last] == '\n'){ |
|
|
if(buffer[last] == '\r' || buffer[last] == '\n'){ |
|
|
@ -30,7 +31,7 @@ void* worker(void* arg){ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
if(strlen(buffer)){ |
|
|
if(strlen(buffer)){ |
|
|
status = handle_command(buffer, fp); |
|
|
|
|
|
|
|
|
status = handle_command(buffer, client); |
|
|
if(status == -1){ |
|
|
if(status == -1){ |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
@ -38,7 +39,7 @@ void* worker(void* arg){ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
--connections; |
|
|
--connections; |
|
|
fclose(fp); |
|
|
|
|
|
|
|
|
fclose(client); |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|