Esempio n. 1
0
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;
}
Esempio n. 3
0
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, &param));
  param.sched_priority += 30;
  THR_OP("Set HTTP thread params",
	 pthread_attr_setschedparam(&attr, &param));
  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;

}
Esempio n. 4
0
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);
}