respond to shutdown signals
This commit is contained in:
parent
7ac2f6506f
commit
6b9be46dd2
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
SESMANOBJ = sesman.o ../common/os_calls.o ../common/d3des.o
|
SESMANOBJ = sesman.o os_calls.o d3des.o
|
||||||
|
|
||||||
CFLAGS = -Wall -O2 -I../common
|
CFLAGS = -Wall -O2 -I../common
|
||||||
|
C_OS_FLAGS = $(CFLAGS) -c
|
||||||
LDFLAGS = -L /usr/gnu/lib
|
LDFLAGS = -L /usr/gnu/lib
|
||||||
LIBS = -lpam_userpass -lpam
|
LIBS = -lpam_userpass -lpam
|
||||||
PAMLIB =
|
PAMLIB =
|
||||||
@ -14,3 +15,9 @@ sesman: $(SESMANOBJ)
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(SESMANOBJ) sesman
|
rm -f $(SESMANOBJ) sesman
|
||||||
|
|
||||||
|
os_calls.o:
|
||||||
|
$(CC) $(C_OS_FLAGS) ../common/os_calls.c
|
||||||
|
|
||||||
|
d3des.o:
|
||||||
|
$(CC) $(C_OS_FLAGS) ../common/d3des.c
|
||||||
|
@ -45,6 +45,9 @@
|
|||||||
|
|
||||||
#define SERVICE "xrdp"
|
#define SERVICE "xrdp"
|
||||||
|
|
||||||
|
int g_sck;
|
||||||
|
int g_pid;
|
||||||
|
|
||||||
struct session_item
|
struct session_item
|
||||||
{
|
{
|
||||||
char name[256];
|
char name[256];
|
||||||
@ -402,6 +405,19 @@ int start_session(int width, int height, int bpp, char* username,
|
|||||||
return display;
|
return display;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
void sesman_shutdown(int sig)
|
||||||
|
{
|
||||||
|
if (getpid() != g_pid)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_printf("shutting down\n\r");
|
||||||
|
g_printf("signal %d pid %d\n\r", sig, getpid());
|
||||||
|
g_tcp_close(g_sck);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
@ -425,7 +441,11 @@ int main(int argc, char** argv)
|
|||||||
char pass[256];
|
char pass[256];
|
||||||
struct session_item* s_item;
|
struct session_item* s_item;
|
||||||
|
|
||||||
|
signal(2, sesman_shutdown);
|
||||||
|
signal(9, sesman_shutdown);
|
||||||
|
signal(15, sesman_shutdown);
|
||||||
g_memset(&session_items, 0, sizeof(session_items));
|
g_memset(&session_items, 0, sizeof(session_items));
|
||||||
|
g_pid = getpid();
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
g_printf("xrdp session manager v0.1\n");
|
g_printf("xrdp session manager v0.1\n");
|
||||||
@ -441,19 +461,19 @@ start session\n");
|
|||||||
make_stream(out_s);
|
make_stream(out_s);
|
||||||
init_stream(out_s, 8192);
|
init_stream(out_s, 8192);
|
||||||
g_printf("listening\n");
|
g_printf("listening\n");
|
||||||
sck = g_tcp_socket();
|
g_sck = g_tcp_socket();
|
||||||
g_tcp_set_non_blocking(sck);
|
g_tcp_set_non_blocking(g_sck);
|
||||||
error = g_tcp_bind(sck, "3350");
|
error = g_tcp_bind(g_sck, "3350");
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
{
|
{
|
||||||
error = g_tcp_listen(sck);
|
error = g_tcp_listen(g_sck);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
{
|
{
|
||||||
in_sck = g_tcp_accept(sck);
|
in_sck = g_tcp_accept(g_sck);
|
||||||
while (in_sck == -1 && g_tcp_last_error_would_block(sck))
|
while (in_sck == -1 && g_tcp_last_error_would_block(g_sck))
|
||||||
{
|
{
|
||||||
g_sleep(1000);
|
g_sleep(1000);
|
||||||
in_sck = g_tcp_accept(sck);
|
in_sck = g_tcp_accept(g_sck);
|
||||||
}
|
}
|
||||||
while (in_sck > 0)
|
while (in_sck > 0)
|
||||||
{
|
{
|
||||||
@ -513,12 +533,12 @@ start session\n");
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(in_sck);
|
g_tcp_close(in_sck);
|
||||||
in_sck = g_tcp_accept(sck);
|
in_sck = g_tcp_accept(g_sck);
|
||||||
while (in_sck == -1 && g_tcp_last_error_would_block(sck))
|
while (in_sck == -1 && g_tcp_last_error_would_block(g_sck))
|
||||||
{
|
{
|
||||||
g_sleep(1000);
|
g_sleep(1000);
|
||||||
in_sck = g_tcp_accept(sck);
|
in_sck = g_tcp_accept(g_sck);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -531,7 +551,7 @@ start session\n");
|
|||||||
{
|
{
|
||||||
g_printf("bind error\n");
|
g_printf("bind error\n");
|
||||||
}
|
}
|
||||||
g_tcp_close(sck);
|
g_tcp_close(g_sck);
|
||||||
free_stream(in_s);
|
free_stream(in_s);
|
||||||
free_stream(out_s);
|
free_stream(out_s);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user