From 2dc3eea2206b0af1c26293c07f908081d9c0595f Mon Sep 17 00:00:00 2001 From: aixiao Date: Fri, 5 May 2023 10:45:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=9A=E7=BA=BF=E7=A8=8B:?= =?UTF-8?q?=20=E7=BA=BF=E7=A8=8B=E4=BC=98=E5=85=88=E7=BA=A7=E3=80=81?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E5=88=86=E7=A6=BB=E3=80=81=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=85=88=E5=88=B0=E5=85=88=E5=BE=97=EF=BC=88=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=EF=BC=89=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 4 ++-- forward-tunnel.c | 43 +++++++++++++++++++++++++++++++++---------- forward-tunnel.h | 4 ++++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 3fb977e..ecf4539 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CROSS_COMPILE ?= CC := $(CROSS_COMPILE)gcc STRIP := $(CROSS_COMPILE)strip CFLAGS = -Wall -g -O3 -LIB = -lssh2 -pthread +LIB = -lssh2 -pthread -static OBJ = tunnel SSH2_LIB := $(shell pkg-config --static --libs --cflags libssh2) @@ -12,7 +12,7 @@ all:forward-tunnel reverse-tunnel forward-tunnel: forward-tunnel.o $(CC) $(CFLAGS) -o forward-tunnel $^ $(SSH2_LIB) $(LIB) - $(STRIP) forward-tunnel + : $(STRIP) forward-tunnel reverse-tunnel: reverse-tunnel.o $(CC) $(CFLAGS) -o reverse-tunnel $^ $(SSH2_LIB) $(LIB) diff --git a/forward-tunnel.c b/forward-tunnel.c index a426aa0..35dd3d5 100644 --- a/forward-tunnel.c +++ b/forward-tunnel.c @@ -218,6 +218,13 @@ shutdown: } +int nice( int increment) +{ + int oldprio = getpriority(PRIO_PROCESS, getpid()); + printf("%d\n", oldprio); + return setpriority(PRIO_PROCESS, getpid(), oldprio + increment); +} + static char help_info(void) { static const char name[] = "STunnel"; @@ -346,14 +353,7 @@ int main(int argc, char *argv[], char **env) fprintf(stderr, "Waiting for TCP connection on %s:%d...\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port)); - pthread_t thread_id = 0; - sigset_t signal_mask; - sigemptyset(&signal_mask); - sigaddset(&signal_mask, SIGPIPE); // 忽略PIPE信号 - if (pthread_sigmask(SIG_BLOCK, &signal_mask, NULL) != 0) { - printf("block sigpipe error\n"); - } - + if (daemon_is == 1) { if (daemon(1, 1)) { perror("daemon"); @@ -361,6 +361,30 @@ int main(int argc, char *argv[], char **env) } } + + if (-1 == (nice(-20))) // 进程优先级 + perror("nice"); + + + pthread_t thread_id = 0; + pthread_attr_t attr; + pthread_attr_init(&attr); + struct sched_param sched_param; + sigset_t signal_mask; + + sigemptyset(&signal_mask); + sigaddset(&signal_mask, SIGPIPE); // 忽略PIPE信号 + if (pthread_sigmask(SIG_BLOCK, &signal_mask, NULL) != 0) { + printf("block sigpipe error\n"); + } + pthread_attr_setschedpolicy(&attr, SCHED_FIFO); // 先到先得(实时调度)算法. + //pthread_attr_getschedparam(&attr, &sched_param); + sched_param.sched_priority = 99; + pthread_attr_setschedparam(&attr, &sched_param); // SCHED_FIFO 和 SCHED_RR 策略的静态优先级范围为 1 到 99 ,其余的优先级为 0 政策。 + pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); // 系统所有线程之间争夺 CPU 资源. + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); // 线程执行完函数后,会自行终止并释放占用的资源. + + while (1) { server_addr_len = sizeof(server_addr); forwardsock = accept(listensock, (struct sockaddr *)&sin, &server_addr_len); @@ -369,11 +393,10 @@ int main(int argc, char *argv[], char **env) goto shutdown; } - pthread_create(&thread_id, NULL, &forward_tunnel, (void *)&forwardsock); + pthread_create(&thread_id, &attr, &forward_tunnel, (void *)&forwardsock); } - pthread_join(thread_id, NULL); pthread_exit(NULL); diff --git a/forward-tunnel.h b/forward-tunnel.h index 6ef649d..9584545 100644 --- a/forward-tunnel.h +++ b/forward-tunnel.h @@ -16,7 +16,11 @@ #include #include +#include +#include + #define BUILD(fmt...) do { fprintf(stderr,"%s %s ",__DATE__,__TIME__); fprintf(stderr, ##fmt); } while(0) + #ifndef INADDR_NONE #define INADDR_NONE (in_addr_t)-1 #endif