void tcp_reverse_proxy(int server_port, const char* printer, int printer_port) { int servfd, clifd; struct sockaddr_in servaddr, cliaddr; servfd = tcp_create_socket(); tcp_bind_and_listen(servfd, server_port); while (1) { long timestamp; socklen_t length = sizeof(cliaddr); clifd = accept(servfd, (struct sockaddr*)&cliaddr, &length); if (clifd < 0) { printf("error comes when call accept!\n"); break; } pthread_t id = 0; tcp_server_thread_info* pinfo = new tcp_server_thread_info(); bzero(pinfo, sizeof(tcp_server_thread_info)); strcpy(pinfo->printer, printer); pinfo->printer_port = printer_port; pinfo->accepted_socket = clifd; int ret = pthread_create(&id, NULL, tcp_server_handler, pinfo); if (ret != 0) { printf ("Create pthread error!\n"); exit (1); } } }
void tcp_reverse_proxy(int server_port, const char* stamp, int stamp_port, int waf_mode, char *logname) { int servfd, clifd; struct sockaddr_in cliaddr; servfd = tcp_create_socket(server_port); tcp_bind_and_listen(servfd, server_port); while (1) { socklen_t length = sizeof(cliaddr); clifd = accept(servfd, (struct sockaddr*)&cliaddr, &length); if (clifd < 0) { DEBUG("Error when call accept()\n"); break; } pthread_t id = 0; struct tcp_server_thread_info *pinfo =(struct tcp_server_thread_info *) xmalloc(sizeof(struct tcp_server_thread_info)); bzero(pinfo, sizeof(struct tcp_server_thread_info)); strcpy(pinfo->stamp, stamp); pinfo->stamp_port = stamp_port; pinfo->accepted_socket = clifd; strcpy(pinfo->log_reg,logname); pinfo->wafmode = waf_mode; int ret = pthread_create(&id, NULL, tcp_server_handler, pinfo); if (ret != 0) { DEBUG("Create pthread error!\n"); exit (1); } // tcp_server_handler() use free() at pinfo pointer, if call free() here causes double free } }