acl/samples/master/master_notify/main.c

62 lines
1.4 KiB
C
Raw Normal View History

#include "lib_acl.h"
#include <assert.h>
#include "service_main.h"
#include "service_var.h"
static void service_test(void)
{
const char *addr = "127.0.0.1:8885";
ACL_VSTREAM *sstream = acl_vstream_listen(addr, 32), *client;
int ret;
assert(sstream != NULL);
acl_xinetd_params_int_table(NULL, var_conf_int_tab);
acl_xinetd_params_str_table(NULL, var_conf_str_tab);
acl_xinetd_params_bool_table(NULL, var_conf_bool_tab);
printf("listen %s ok\n", addr);
service_init(NULL);
while (1) {
client = acl_vstream_accept(sstream, NULL, 0);
if (client == NULL) {
printf("accept error: %s\n", acl_last_serror());
break;
}
while (1) {
if (acl_readable(ACL_VSTREAM_SOCK(client)) == 0)
continue;
ret = service_main(client, NULL);
if (ret < 0) {
acl_vstream_close(client);
break;
}
if (ret > 0)
break;
}
}
service_exit(NULL);
acl_vstream_close(sstream);
}
int main(int argc, char *argv[])
{
if (argc == 2 && strcasecmp(argv[1], "test") == 0) {
service_test();
} else {
acl_ioctl_app_main(argc, argv, service_main, NULL,
ACL_APP_CTL_INIT_FN, service_init,
ACL_APP_CTL_EXIT_FN, service_exit,
ACL_APP_CTL_CFG_BOOL, var_conf_bool_tab,
ACL_APP_CTL_CFG_INT, var_conf_int_tab,
ACL_APP_CTL_CFG_STR, var_conf_str_tab,
ACL_APP_CTL_END);
}
return (0);
}