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
146 PRCList element; /* list of the server's workers */
149 CSServer_t *server; /* back pointer to server structure */
164 PRThread *thread; /* the main server thread */
172 CSState_t state; /* the server's state */
274 ("\tClient(0x%p): connecting to server at %s\n", me, buffer));
382 ("\tClient(0x%p): disconnected from server\n", me));
410 static PRStatus ProcessRequest(PRFileDesc *fd, CSServer_t *server)
532 PR_Lock(server->ml);
533 server->operations += 1;
534 server->bytesTransferred += filebytes;
535 PR_Unlock(server->ml);
613 PR_Lock(server->ml);
614 server->bytesTransferred += filebytes;
615 PR_Unlock(server->ml);
857 static PRStatus CreateWorker(CSServer_t *server, CSPool_t *pool)
861 worker->server = server;
880 CSServer_t *server = worker->server;
881 CSPool_t *pool = &server->pool;
889 PR_Lock(server->ml);
890 PR_APPEND_LINK(&worker->element, &server->list);
893 while (cs_run == server->state)
895 while (pool->accepting >= server->workers.accepting)
902 if (Aborted(rv) || (cs_run != server->state))
912 PR_Unlock(server->ml);
917 fd = PR_Accept(server->listener, &from, PR_INTERVAL_NO_TIMEOUT);
919 PR_Lock(server->ml);
925 if (NULL != server->listener)
927 PR_Close(server->listener);
928 server->listener = NULL;
944 ((pool->workers < server->workers.minimum) ||
946 && (pool->workers < server->workers.maximum))) ?
949 PR_Unlock(server->ml);
951 if (another) (void)CreateWorker(server, pool);
953 rv = ProcessRequest(fd, server);
957 ("\t\tWorker(0x%p): server process ended abnormally\n", me));
960 PR_Lock(server->ml);
967 PR_Unlock(server->ml);
979 PR_Lock(server->ml);
983 PR_Unlock(server->ml);
993 CSServer_t *server = (CSServer_t*)arg;
994 PRThread *me = server->thread = PR_CurrentThread();
997 server->listener = PR_Socket(domain, SOCK_STREAM, protocol);
1001 rv = PR_SetSocketOption(server->listener, &sockOpt);
1007 rv = PR_Bind(server->listener, &serverAddress);
1010 rv = PR_Listen(server->listener, server->backlog);
1013 server->started = PR_IntervalNow();
1016 PR_Lock(server->ml);
1017 server->state = cs_run;
1018 PR_NotifyCondVar(server->stateChange);
1019 PR_Unlock(server->ml);
1027 rv = CreateWorker(server, &server->pool);
1039 PR_Lock(server->ml);
1040 while ((cs_run == server->state) && !Aborted(rv))
1042 rv = PR_WaitCondVar(server->stateChange, PR_INTERVAL_NO_TIMEOUT);
1044 PR_Unlock(server->ml);
1057 server->workers.minimum = server->workers.maximum = 0;
1059 PR_Lock(server->ml);
1060 while (!PR_CLIST_IS_EMPTY(&server->list))
1062 PRCList *head = PR_LIST_HEAD(&server->list);
1072 while (server->pool.workers > 0)
1077 me, server->pool.workers));
1078 (void)PR_WaitCondVar(server->pool.exiting, PR_INTERVAL_NO_TIMEOUT);
1081 server->state = cs_exit;
1082 PR_NotifyCondVar(server->stateChange);
1083 PR_Unlock(server->ml);
1088 me, server->operations, server->bytesTransferred));
1090 if (NULL != server->listener) PR_Close(server->listener);
1091 server->stopped = PR_IntervalNow();
1112 PR_fprintf(debug_out, "\t-w <threads> minimal number of server threads (1)\n");
1113 PR_fprintf(debug_out, "\t-W <threads> maximum number of server threads (1)\n");
1115 PR_fprintf(debug_out, "\t-s <string> dsn name of server (localhost)\n");
1138 CSServer_t *server = NULL;
1155 * -w <threads> minimal number of server threads
1156 * -W <threads> maximum number of server threads
1158 * -s <string> dsn name of server (implies no server here)
1209 case 'w': /* minimum server worker threads */
1212 case 'W': /* maximum server worker threads */
1218 case 's': /* server's address */
1261 /* Establish the server */
1264 ("main(0x%p): starting server\n", PR_CurrentThread()));
1266 server = PR_NEWZAP(CSServer_t);
1267 PR_INIT_CLIST(&server->list);
1268 server->state = cs_init;
1269 server->ml = PR_NewLock();
1270 server->backlog = backlog;
1271 server->port = DEFAULT_PORT;
1272 server->workers.minimum = workersMin;
1273 server->workers.maximum = workersMax;
1274 server->workers.accepting = accepting;
1275 server->stateChange = PR_NewCondVar(server->ml);
1276 server->pool.exiting = PR_NewCondVar(server->ml);
1277 server->pool.acceptComplete = PR_NewCondVar(server->ml);
1281 ("main(0x%p): creating server thread\n", PR_CurrentThread()));
1284 Server, server, PR_PRIORITY_HIGH, PR_JOINABLE_THREAD);
1289 ("main(0x%p): waiting for server init\n", PR_CurrentThread()));
1291 PR_Lock(server->ml);
1292 while (server->state == cs_init)
1293 PR_WaitCondVar(server->stateChange, PR_INTERVAL_NO_TIMEOUT);
1294 PR_Unlock(server->ml);
1298 ("main(0x%p): server init complete (port #%d)\n",
1299 PR_CurrentThread(), server->port));
1394 if (NULL != server)
1396 /* All clients joined - retrieve the server */
1399 ("main(0x%p): notifying server(0x%p) to stop\n",
1400 PR_CurrentThread(), server->thread));
1402 PR_Lock(server->ml);
1403 server->state = cs_stop;
1404 PR_Interrupt(server->thread);
1405 while (cs_exit != server->state)
1406 PR_WaitCondVar(server->stateChange, PR_INTERVAL_NO_TIMEOUT);
1407 PR_Unlock(server->ml);
1411 ("main(0x%p): joining server(0x%p)\n",
1412 PR_CurrentThread(), server->thread));
1413 joinStatus = JoinThread(server->thread);
1416 PR_DestroyCondVar(server->stateChange);
1417 PR_DestroyCondVar(server->pool.exiting);
1418 PR_DestroyCondVar(server->pool.acceptComplete);
1419 PR_DestroyLock(server->ml);
1420 PR_DELETE(server);