#include #include #include #include #include #include uint16_t total = 0; void* handle_client(void* param){ int cskt = *((int*)param); char type; size_t readlen; while(readlen = read(cskt, &type, 1) == 1){ if(type == 1){ uint16_t new_count; read(cskt, &new_count, 2); total += new_count; printf("New total is %u\n", total); } else if(type == 2){ type = 3; write(cskt, &type, 1); write(cskt, &total, 2); } } close(cskt); } int main(int args, char ** argv){ struct sockaddr_in sad; sad.sin_port = htons(7010); 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; for(;;){ client_fd = accept(skt, 0, 0); pthread_t t; pthread_create(&t, 0, handle_client, (void*)&client_fd); printf("New connection\n"); usleep(100); } return 0; }