int main(int argc, char **argv){ /* initialize sdl */ if (SDL_Init(SDL_INIT_VIDEO) < 0){ perror("could not initialize sdl"); return 1; } SDL_ShowCursor(SDL_DISABLE); SDL_WM_SetCaption("simple raytracer demo", ""); SDL_Surface *screen = SDL_SetVideoMode(WIDTH, HEIGHT, BPP*8, SDL_HWSURFACE|SDL_DOUBLEBUF); if(!screen) { perror("could not set video mode"); SDL_Quit(); return 1; } /* initialize graphics state */ graphics_state state; state.screen = screen; if(init_model(&state) != 0) return -1; if(init_lights(&state) != 0) return -1; if(init_graphics(&state) != 0) return -1; if(init_worker_threads(&state) != 0) return -1; /* main loop */ int run = 1; float ema_nanos = 0, ema_nanos2 = 0, max_nanos = 0; long start_time; start_time = now(); while(run){ /* change the scene */ timestep(&state); /* render the scene */ if(draw_screen(&state)){ perror("render error"); return 1; } /* performance metrics */ state.frame++; long nanos = now()-start_time; ema_nanos = 0.9f*ema_nanos + 0.1*nanos; ema_nanos2 = 0.9f*ema_nanos2 + 0.1*nanos*nanos; if(nanos > max_nanos) max_nanos = nanos; if(state.frame % 10 == 0){ float stdev_nanos = sqrtf(ema_nanos2 - ema_nanos*ema_nanos); float fps = 1000000000 / ema_nanos; float fps_sigma = 1000000000 / (ema_nanos + stdev_nanos); float fps_worst = 1000000000 / max_nanos; printf("%.2f +/- %.2f (worst: %.2f) fps\n", fps, fps-fps_sigma, fps_worst); max_nanos = 0; } start_time = now(); int sleep_us = TARGET_US - nanos/1000; if(sleep_us > 0) usleep(sleep_us); /* check if we need to exit */ SDL_Event event; while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT || event.type == SDL_MOUSEBUTTONDOWN){ run = 0; break; } } } /* reset resolution to normal, exit */ SDL_Quit(); return 0; }
int main(int argc, const char * argv[]) { // insert code here... struct sockaddr_in servaddr, cliaddr; socklen_t cliaddr_len; int listenfd, connfd; int ret = 0; char s[INET6_ADDRSTRLEN]; int serv_port; if (argc != 2) { fputs("usage: ./porxy port\n", stderr); exit(1); } sscanf(argv[1],"%d",&serv_port); signal(SIGTERM, cleanExit); signal(SIGINT, cleanExit); signal(SIGPIPE, SIG_IGN); listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(serv_port); ret = bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); if(ret == -1){ printf("Bind socket error: errno=%d port=%d\n",errno,serv_port); return 0; } ret = listen(listenfd, 20); if(ret == -1){ printf("Listen socket error: errno=%d port=%d\n",errno,serv_port); return 0; } /* int n = 1; setsockopt(listenfd, SOL_SOCKET, SO_NOSIGPIPE, &n, sizeof(n)); */ printf("Proxy Server started port:%d, accepting connections ...\n",serv_port); RequestQueue *queue = new RequestQueue(); init_worker_threads(queue); while (1) { cliaddr_len = sizeof(cliaddr); connfd = accept(listenfd,(struct sockaddr *)&cliaddr, &cliaddr_len); if (connfd == -1) { if (errno == EINTR)//continue by system interupt continue; else { printf("Accept socket error: errno=%d port=%d\n",errno,serv_port); return 0; } } inet_ntop(cliaddr.sin_family, get_in_addr((struct sockaddr *)&cliaddr), s, sizeof s); //printf("Proxy Server accept connection from %s sockID: %d\n", s ,connfd); //thread pool or request queue queue->Push(connfd); } return 0; }