httpUDP/main.c

80 lines
1.8 KiB
C
Raw Permalink Normal View History

2021-12-19 19:01:38 +08:00
#include <dirent.h>
#include <pthread.h>
#include "main.h"
struct global global;
struct tcp_mode http, https;
struct save_header *saveHdrs;
char *default_ssl_request;
int default_ssl_request_len;
void *timeout_check(void *nullPtr)
{
while (1) {
sleep(60);
if (global.udp_listen_fd >= 0)
udp_timeout_check();
}
return NULL;
}
/* 初始化变量 */
static void initVariable()
{
memset(&global, 0, sizeof(global));
memset(&https, 0, sizeof(https));
memset(&udp, 0, sizeof(udp));
saveHdrs = NULL;
http.dst.sin_family = https.dst.sin_family = udp.dst.sin_family = AF_INET;
global.tcp_listen_fd = global.udp_listen_fd = global.uid = -1;
}
static void server_init()
{
/* 忽略PIPE信号 */
signal(SIGPIPE, SIG_IGN);
//不能用setgid和setuid这两个函数不能切换回root可能导致HTTPUDP代理失败
if (global.uid > -1 && (setegid(global.uid) == -1 || seteuid(global.uid) == -1)) {
perror("setegid(or seteuid)");
exit(1);
}
#ifndef DEBUG
if (daemon(1, 1) == -1) {
perror("daemon");
exit(1);
}
#endif
/*
dns缓存
*/
//while (global.procs-- > 1 && (child_pid = fork()) == 0);
}
static void start_server_loop()
{
//printf("%s", udp.http_request);
//printf("%d\n", udp.http_request_len);
pthread_t thread_id;
if (global.timeout_m)
pthread_create(&thread_id, NULL, &timeout_check, NULL);
udp_init();
udp_loop(NULL);
}
int main(int argc, char *argv[])
{
initVariable();
read_conf(argv[1]);
server_init();
start_server_loop();
return 0;
}