gm_Bool httpreq_init(int port, int boost_prio) { char portnum[8]; int i; pthread_attr_t att; struct sched_param sched; sprintf(portnum,"%d",port); gSock = slisten(portnum); if (gSock < 1) { /* failed to open listening socket */ MON_SEND_2(MON_ERR,"Socket listen failed: %s\n", strerror(errno)); return gm_False; /* NOTREACHED */ } i = 1; if (setsockopt(gSock, SOL_SOCKET, SO_REUSEADDR, (const char *)&i, sizeof(int)) != 0) { MON_SEND_2(MON_ERR,"setsockopt SO_REUSEADDR: %s", strerror(errno)); } i = 0; if (setsockopt(gSock, SOL_SOCKET, SO_KEEPALIVE, (const char *)&i, sizeof(int)) != 0) { MON_SEND_2(MON_ERR,"setsockopt SO_KEEPALIVE: %s", strerror(errno)); } MON_SEND_2(MON_LOGGING,"(HTTP): listening on port %d\n", port); n_httpreqs = 1; /* spawn a local worker thread */ THR_OP("HTTP thread attrs init", pthread_attr_init(&att)); THR_OP("HTTP set global scope", pthread_attr_setscope(&att, PTHREAD_SCOPE_SYSTEM)); THR_OP("HTTP get sched params", pthread_attr_getschedparam(&att, &sched)); #ifdef _MIT_POSIX_THREADS sched.prio += boost_prio; #else sched.sched_priority += boost_prio; #endif THR_OP("HTTP boost prio", pthread_attr_setschedparam(&att, &sched)); MON_SEND_2(MON_LOGGING,"Boosting HTTP accept() thread prio by %d\n", boost_prio); THR_OP("Thread create HTTP", pthread_create(&thr_http, (pthread_attr_t *)&att, http_eventloop_proc, (void *)NULL)); proxy_debug_2(DBG_HTTP, "Spawned HTTP worker thread\n"); return gm_True; }
int setup_listen(char *socketNumber) { int socket_listen; if ((socket_listen = slisten(socketNumber)) < 0) { perror("(SERVER): slisten"); exit(1); } return socket_listen; }
pthread_t harvest_httpreq_init(int port) { char portnum[8]; pthread_attr_t attr; struct sched_param param; nreqs2 = 0; sprintf(portnum,"%d",port); gSock2 = slisten(portnum); assert(gSock2 != 0); #if 0 /* BUG:: */ proxy_debug_2(DBG_HTTP, "Setting up sock options"); if (setsockopt(gSock2, SOL_SOCKET, SO_REUSEADDR, (const char *)1, sizeof(char)) != 0) proxy_errlog_2("setsockopt SO_REUSEADDR: %s", strerror(errno)); if (setsockopt(gSock2, SOL_SOCKET, SO_KEEPALIVE, (const char *)0, sizeof(char)) != 0) proxy_errlog_2("setsockopt SO_KEEPALIVE: %s", strerror(errno)); #endif proxy_debug_3(DBG_HTTP, "Listening on port %d\n", port); /* spawn a local worker thread */ THR_OP("Init attributes", pthread_attr_init(&attr)); THR_OP("Get HTTP thread params", pthread_attr_getschedparam(&attr, ¶m)); param.sched_priority += 30; THR_OP("Set HTTP thread params", pthread_attr_setschedparam(&attr, ¶m)); THR_OP("Thread create HTTP", pthread_create(&thr_http2, (pthread_attr_t *)&attr, harvest_http_eventloop_proc, (void *)NULL)); proxy_debug_2(DBG_HTTP, "Spawned HTTP worker thread\n"); return thr_http2; }
int main(int argc, char **argv) { cache_perf tc; unsigned long long cache_size, num_entries; unsigned long int report_interval; int accept_socket, dsocket, cntr = 0; lf_entry next_entry; if (argc != 5) usage(); if (sscanf(argv[2], "%llu", &cache_size) != 1) usage(); if (sscanf(argv[3], "%llu", &num_entries) != 1) usage(); if (sscanf(argv[4], "%lu", &report_interval) != 1) usage(); accept_socket = slisten(argv[1]); if (accept_socket == -1) usage(); fprintf(stderr, "Starting up cache sim server, params:\n"); fprintf(stderr, " port %s, cachesize %llu, num_entries %llu, ri %lu\n", argv[1], cache_size, num_entries, report_interval); if (!init_cache_el(cache_size, num_entries, &tc)) { fprintf(stderr, "initialize_cache failed.\n"); usage(); } if ( (dsocket = saccept(accept_socket)) < 0) { fprintf(stderr, "accept failed.\n"); usage(); } while(1) { int gne_res; gne_res = lf_get_next_entry(dsocket, &next_entry, 3); if ( (gne_res != 0) && (gne_res != 1)) { fprintf(stderr, "get_next_entry failed. All done!\n"); exit(0); } process_log_entry(&tc, &next_entry); cntr++; if (gne_res == 1) { fprintf(stderr, "All done!\n"); exit(0); } if ( (cntr % report_interval) == 0) dump_cache_stats(&tc, stdout); free(next_entry.url); } exit(0); }