Exemplo n.º 1
0
Arquivo: daemon.c Projeto: faal/pcma
int loop(void *socket)
{
    int ret = 0;
    zmq_msg_t msg;

    for (;;) {
        if (zmq_msg_init(&msg) < 0) {
            perror("zmq_msg_init");
            continue;
        }

        if (zmq_recv(socket, &msg, 0) < 0) {
            perror("zmq_recv");
            return (-1);
        }

        ret = handle_req(socket, &msg);
        if (ret < 0) {
            LOG_ERROR("handle_req failed with %i\n", ret);
        }

        if (zmq_msg_close(&msg) < 0) {
            perror("zmq_msg_close");
        }
    }

    return (-42);               /* Yiipee! */
}
Exemplo n.º 2
0
static int proxy_loop(void) {
    ssize_t rc;
    struct storage_msg msg;

    /* enter main message handling loop */
    while (true) {
        /* get incoming message */
        rc = ipc_get_msg(&msg, req_buffer, REQ_BUFFER_SIZE);
        if (rc < 0) return rc;

        /* handle request */
        req_buffer[rc] = 0; /* force zero termination */
        rc = handle_req(&msg, req_buffer, rc);
        if (rc) return rc;
    }

    return 0;
}
int main(int argc, char** argv)
{

 lsp_set_drop_rate(0.5);  
  if(argc == 2)
    {
//    srand(12345);

    char *host_port = argv[1];

    char host[20];
    char port[7];
    bool flg=false;
    int j=0;
    int k=0;
    int ii=0;
    memset(host,0,20);
    memset(port,0,7);

    for(;ii<strlen(argv[1]);ii++)
    {
      if(host_port[ii] == ':')
         flg=true;
      if(flg==true && host_port[ii]!=':')
          port[j++]=host_port[ii];
      if(flg == false && host_port[ii]!=':')
          host[k++]=host_port[ii];

      //        printf("%d %d %d\n",ii,j,k);
    }


        
    lsp_client* myworker = lsp_client_create(host,atoi(port));
     if (myworker==NULL)
	{
	  printf("Worker not created\n");
     	  return true;
      }
     char message[] ="j";
    lsp_client_write(myworker, (void *) message, strlen(message));
    for(;;)
    {
         //lsp_client_write(myworker, (void *h) message, strlen(message));
         uint8_t buffer[4096];
         memset(buffer,0,4096);
         int bytes_read = lsp_client_read(myworker,buffer);
         sleep(2);
	//printf("Received bytes %d \n",bytes_read);
         if(bytes_read >0 )
         {
            //printf("Received bytes %d \n",bytes_read);
	    if(buffer[0]!='c')
		continue;
	    handle_req(buffer,bytes_read);
            lsp_client_write(myworker, (void *) global_pld, strlen(global_pld));
         }
         else if (bytes_read<0) {
             printf("Disconnected\n");
             break;
         }
    
    }

    lsp_client_close(myworker);
    //    printf("End of worker code\n");
    
    }
    else
    {
       printf("\nPlease enter correct number of arguments\n");
    }
    return 0;
} 
Exemplo n.º 4
0
/*
 * main event loop for ilbd
 * asserts that argument 'listener' is a server socket ready to accept() on.
 */
static void
main_loop(int listener)
{
	port_event_t		p_ev;
	int			ev_port, ev_port_obj;
	ilbd_event_obj_t	ev_obj;
	ilbd_timer_event_obj_t	timer_ev_obj;

	ev_port = port_create();
	if (ev_port == -1) {
		logperror("main_loop: port_create failed");
		exit(-1);
	}
	ilbd_hc_timer_init(ev_port, &timer_ev_obj);

	ev_obj.ev = ILBD_EVENT_NEW_REQ;
	if (port_associate(ev_port, PORT_SOURCE_FD, listener, POLLRDNORM,
	    &ev_obj) == -1) {
		logperror("main_loop: port_associate failed");
		exit(1);
	}

	i_ilbd_read_config(ev_port);
	ilbd_hc_timer_update(&timer_ev_obj);

	_NOTE(CONSTCOND)
	while (B_TRUE) {
		int r;
		ilbd_event_t event;
		ilbd_client_t *cli;

		r = port_get(ev_port, &p_ev, NULL);
		if (r == -1) {
			if (errno == EINTR)
				continue;
			logperror("main_loop: port_get failed");
			break;
		}

		ev_port_obj = p_ev.portev_object;
		event = ((ilbd_event_obj_t *)p_ev.portev_user)->ev;

		switch (event) {
		case ILBD_EVENT_TIMER:
			ilbd_hc_timeout();
			break;

		case ILBD_EVENT_PROBE:
			ilbd_hc_probe_return(ev_port, ev_port_obj,
			    p_ev.portev_events,
			    (ilbd_hc_probe_event_t *)p_ev.portev_user);
			break;

		case ILBD_EVENT_NEW_REQ:
			assert(ev_port_obj == listener);
			/*
			 * An error happens in the listener.  Exit
			 * for now....
			 */
			if (p_ev.portev_events & (POLLHUP|POLLERR)) {
				logerr("main_loop: listener error");
				exit(1);
			}
			new_req(ev_port, ev_port_obj, &ev_obj);
			break;

		case ILBD_EVENT_REP_OK:
		case ILBD_EVENT_REQ:
			cli = (ilbd_client_t *)p_ev.portev_user;
			assert(ev_port_obj == cli->cli_sd);

			/*
			 * An error happens in the newly accepted
			 * client request.  Clean up the client.
			 * this also happens when client closes socket,
			 * so not necessarily a reason for alarm
			 */
			if (p_ev.portev_events & (POLLHUP|POLLERR)) {
				ilbd_free_cli(cli);
				break;
			}

			handle_req(ev_port, event, cli);
			break;

		default:
			logerr("main_loop: unknown event %d", event);
			exit(EXIT_FAILURE);
			break;
		}

		ilbd_hc_timer_update(&timer_ev_obj);
	}
}