📄 9-6.c
字号:
/*--
Copyright (c)
File Name:
auth_svr.c
Version:
1.0
Abstract:
Authentication service program source code
Author:
xxx
Created on:
0000-00-
Modified History:
Modified Person:
--*/
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
#include "afxdef.h"
#include "xmlfn.h"
#include "utilex.h"
#include "bsocket.h"
#include "service.h"
#include "classid.h"
#include "tariff.h"
/* Declare program run flag */
extern int g_runflag;
void run_service();
void request_trans(SOCKET* sock, const char* ip);
int request_recv(SOCKET sock, xmlkeylist* list);
int main(void)
{
/* Set signal transaction */
signal(SIGTERM, sig_action);
//signal(SIGINT, sig_action);
signal(SIGPIPE, sig_action);
signal(SIGQUIT, sig_action);
signal(SIGHUP, sig_action);
signal(SIGCHLD, clean_childpid);
if ( load_config("../etc/kernel.ini") ) {
fprintf(stderr, "Fail to load_config() \n");
}
if ( load_tariff() ) {
fprintf(stderr, "Fail to load_tariff() \n");
}
if ( init_classid() ) {
fprintf(stderr, "Fail to init_classid() \n");
return -1;
}
/* Run level service */
run_service();
return 0;
}
void run_service()
{
SOCKET lis_sock;
SOCKET cli_sock;
char fromip[20];
if ( (lis_sock = create_sock(AF_INET, SOCK_STREAM, 0)) == -1 ) {
fprintf(stderr, "Fail to create socket \n");
return;
}
if ( bind_sock(lis_sock, LIS_PORT) != 0 ) {
fprintf(stderr, "Fail to bind socket \n");
return;
}
if ( listen_sock(lis_sock, 15) != 0 ) {
fprintf(stderr, "Fail to listen port \n");
return;
}
while ( g_runflag ) {
if ( (cli_sock = accept_sock(lis_sock, fromip)) == -1 ) {
if ( errno == EINTR )
continue;
else {
fprintf(stderr, "Fail to accept socket \n");
break;
}
}
if ( fork() == 0 ) {
/* Request transaction */
signal(SIGTERM, SIG_IGN);
request_trans(&cli_sock, fromip);
exit(0);
}
else
close_sock(&cli_sock);
} // end while
close_sock(&lis_sock);
return;
}
void request_trans(SOCKET* sock, const char* ip)
{
int rs;
xmlkeylist list;
do {
/* Receive request message */
rs = request_recv(*sock, &list);
if ( rs != 0 )
break; /* jump out loop */
/* classify service */
rs = xml_service(*sock, &list);
if ( rs != 0 )
break; /* jump out loop */
} while ( 0 ); // end while
close_sock(sock);
return;
}
int request_recv(SOCKET sock, xmlkeylist* list)
{
int rs;
char buf[1024];
/* Receive XML string */
rs = recv_sock(sock, buf, sizeof(buf) - 1);
if ( rs <= 0 ) /* error occur or receive end flag */
return -1;
#ifdef _DEBUG
buf[rs] = 0;
printf("Recv: %s\n", buf);
#endif
rs = get_xml_keylist(buf, rs, list);
return rs;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -