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! */ }
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; }
/* * 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); } }