httpUDP/main.c
2021-12-19 19:01:38 +08:00

80 lines
1.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}