Lines Matching defs:server

44  * server side thread termination without a shutdown() or closesocket()
50 * client side to recv() all his data before the server side thread
144 PRCList element; /* list of the server's workers */
147 CSServer_t *server; /* back pointer to server structure */
162 PRThread *thread; /* the main server thread */
170 CSState_t state; /* the server's state */
272 ("\tClient(0x%p): connecting to server at %s\n", me, buffer));
381 ("\tClient(0x%p): disconnected from server\n", me));
409 static PRStatus ProcessRequest(PRFileDesc *fd, CSServer_t *server)
531 PR_Lock(server->ml);
532 server->operations += 1;
533 server->bytesTransferred += filebytes;
534 PR_Unlock(server->ml);
613 PR_Lock(server->ml);
614 server->bytesTransferred += filebytes;
615 PR_Unlock(server->ml);
643 static PRStatus CreateWorker(CSServer_t *server, CSPool_t *pool)
646 worker->server = server;
672 CSServer_t *server = worker->server;
673 CSPool_t *pool = &server->pool;
679 PR_Lock(server->ml);
680 PR_APPEND_LINK(&worker->element, &server->list);
683 while (cs_run == server->state)
685 while (pool->accepting >= server->workers.accepting)
692 if (Aborted(rv) || (cs_run != server->state))
702 PR_Unlock(server->ml);
707 fd = PR_Accept(server->listener, &from, PR_INTERVAL_NO_TIMEOUT);
709 PR_Lock(server->ml);
715 if (NULL != server->listener)
717 PR_Close(server->listener);
718 server->listener = NULL;
734 ((pool->workers < server->workers.minimum) ||
736 && (pool->workers < server->workers.maximum))) ?
739 PR_Unlock(server->ml);
741 if (another) (void)CreateWorker(server, pool);
743 rv = ProcessRequest(fd, server);
747 ("\t\tWorker(0x%p): server process ended abnormally\n", me));
750 PR_Lock(server->ml);
757 PR_Unlock(server->ml);
769 PR_Lock(server->ml);
773 PR_Unlock(server->ml);
784 CSServer_t *server = (CSServer_t*)arg;
787 server->listener = PR_Socket(domain, SOCK_STREAM, protocol);
791 rv = PR_SetSocketOption(server->listener, &sockOpt);
800 rv = PR_Bind(server->listener, &serverAddress);
803 rv = PR_Listen(server->listener, server->backlog);
806 server->started = PR_IntervalNow();
809 PR_Lock(server->ml);
810 server->state = cs_run;
811 PR_NotifyCondVar(server->stateChange);
812 PR_Unlock(server->ml);
820 rv = CreateWorker(server, &server->pool);
832 PR_Lock(server->ml);
833 while ((cs_run == server->state) && !Aborted(rv))
835 rv = PR_WaitCondVar(server->stateChange, PR_INTERVAL_NO_TIMEOUT);
837 PR_Unlock(server->ml);
850 server->workers.minimum = server->workers.maximum = 0;
852 PR_Lock(server->ml);
853 while (!PR_CLIST_IS_EMPTY(&server->list))
855 PRCList *head = PR_LIST_HEAD(&server->list);
865 while (server->pool.workers > 0)
870 me, server->pool.workers));
871 (void)PR_WaitCondVar(server->pool.exiting, PR_INTERVAL_NO_TIMEOUT);
874 server->state = cs_exit;
875 PR_NotifyCondVar(server->stateChange);
876 PR_Unlock(server->ml);
881 me, server->operations, server->bytesTransferred));
883 if (NULL != server->listener) PR_Close(server->listener);
884 server->stopped = PR_IntervalNow();
907 PR_fprintf(debug_out, "\t-w <threads> minimal number of server threads (1)\n");
908 PR_fprintf(debug_out, "\t-W <threads> maximum number of server threads (1)\n");
910 PR_fprintf(debug_out, "\t-s <string> dsn name of server (localhost)\n");
932 CSServer_t *server = NULL;
951 * -w <threads> minimal number of server threads
952 * -W <threads> maximum number of server threads
954 * -s <string> dsn name of server (implies no server here)
992 case 'w': /* minimum server worker threads */
995 case 'W': /* maximum server worker threads */
1001 case 's': /* server's address */
1047 /* Establish the server */
1050 ("main(0x%p): starting server\n", PR_CurrentThread()));
1052 server = PR_NEWZAP(CSServer_t);
1053 PR_INIT_CLIST(&server->list);
1054 server->state = cs_init;
1055 server->ml = PR_NewLock();
1056 server->backlog = backlog;
1057 server->port = DEFAULT_PORT;
1058 server->workers.minimum = workersMin;
1059 server->workers.maximum = workersMax;
1060 server->workers.accepting = accepting;
1061 server->stateChange = PR_NewCondVar(server->ml);
1062 server->pool.exiting = PR_NewCondVar(server->ml);
1063 server->pool.acceptComplete = PR_NewCondVar(server->ml);
1067 ("main(0x%p): creating server thread\n", PR_CurrentThread()));
1069 server->thread = PR_CreateThread(
1070 PR_USER_THREAD, Server, server, PR_PRIORITY_HIGH,
1072 TEST_ASSERT(NULL != server->thread);
1076 ("main(0x%p): waiting for server init\n", PR_CurrentThread()));
1078 PR_Lock(server->ml);
1079 while (server->state == cs_init)
1080 PR_WaitCondVar(server->stateChange, PR_INTERVAL_NO_TIMEOUT);
1081 PR_Unlock(server->ml);
1085 ("main(0x%p): server init complete (port #%d)\n",
1086 PR_CurrentThread(), server->port));
1186 if (NULL != server)
1188 /* All clients joined - retrieve the server */
1191 ("main(0x%p): notifying server(0x%p) to stop\n",
1192 PR_CurrentThread(), server->thread));
1194 PR_Lock(server->ml);
1195 server->state = cs_stop;
1196 PR_Interrupt(server->thread);
1197 while (cs_exit != server->state)
1198 PR_WaitCondVar(server->stateChange, PR_INTERVAL_NO_TIMEOUT);
1199 PR_Unlock(server->ml);
1203 ("main(0x%p): joining server(0x%p)\n",
1204 PR_CurrentThread(), server->thread));
1205 joinStatus = PR_JoinThread(server->thread);
1208 PR_DestroyCondVar(server->stateChange);
1209 PR_DestroyCondVar(server->pool.exiting);
1210 PR_DestroyCondVar(server->pool.acceptComplete);
1211 PR_DestroyLock(server->ml);
1212 PR_DELETE(server);