#include #include #include #include #include #include int main(int argc, char ** argv){ if(fork()) return 0; struct sockaddr_in sad; sad.sin_port = htons(5141); sad.sin_addr.s_addr = INADDR_ANY; sad.sin_family = AF_INET; int skt = socket(AF_INET, SOCK_STREAM, 0); bind(skt, (struct sockaddr *)(&sad), sizeof(struct sockaddr_in)); listen(skt, 5); int client_fd; struct sockaddr_in client_address; socklen_t address_size = sizeof(struct sockaddr_in); int32_t total_weight = 0; int32_t total_squirrels = 0; for(;;){ client_fd = accept(skt, (struct sockaddr *)(&client_address), &address_size); printf("Connection made from address %s\n", inet_ntoa(client_address.sin_addr)); char type; while(1 == read(client_fd, &type, 1)){ if(type == 'N'){ int32_t weight; read(client_fd, &weight, 4); total_weight += weight; total_squirrels++; type = 'A'; write(client_fd, &type, 1); } else if(type == 'Q'){ type = 'S'; int32_t average_weight = total_weight/total_squirrels; write(client_fd, &type, 1); write(client_fd, &total_squirrels, 4); write(client_fd, &average_weight, 4); } } close(client_fd); } return 0; }