コード例 #1
0
ファイル: watchdog.c プロジェクト: 10jschen/acl
int     main(int unused_argc, char **unused_argv)
{
	char      myname[] = "main";
	ACL_WATCHDOG *wp;
	ACL_VSTREAM  *vp;
	char      buf[256] = "test before";

	unused_argc = unused_argc;
	unused_argv = unused_argv;

	acl_msg_verbose = 2;

	printf("buf=%s\n", buf);
	vp = acl_vstream_fdopen(0, 0, 0600, 4096, 0);
	if (vp == NULL)
		acl_msg_fatal("%s(%d)->%s: vstream_fdopen err %s",
				__FILE__, __LINE__, myname,
				strerror(errno));

	wp = acl_watchdog_create(10, __watchdog_fn, (char *) buf);
	acl_watchdog_start(wp);

	while (acl_vstream_gets_nonl(vp, buf, sizeof(buf) - 1) != ACL_VSTREAM_EOF) {
		acl_msg_info(">>> your input:%s", buf);
		if (strcasecmp(buf, "quit") == 0 || strcasecmp(buf, "exit") == 0)
			break;
		acl_watchdog_pat();
	}

	acl_watchdog_destroy(wp);

	exit (0);
}
コード例 #2
0
ファイル: master_trigger.cpp プロジェクト: 2202877/acl
void master_trigger::service_main(char*, int, char*, char**)
{
	acl_assert(__mt != NULL);
#ifndef	WIN32
	if (__mt->daemon_mode_)
		acl_watchdog_pat();
#endif
	__mt->on_trigger();
}
コード例 #3
0
ファイル: master_proc.cpp プロジェクト: DayBreakZhang/acl
void master_proc::service_main(ACL_VSTREAM *stream, char*, char**)
{
	socket_stream* client = NEW socket_stream();
	if (client->open(stream) == false)
		logger_fatal("open stream error!");

	acl_assert(__mp != NULL);
#ifndef	ACL_WINDOWS
	if (__mp->daemon_mode_)
		acl_watchdog_pat();  // 必须通知 acl_master 框架一下
#endif
	__mp->on_accept(client);
	client->unbind();
	delete client;
}
コード例 #4
0
ファイル: master_udp.cpp プロジェクト: FlowSea/acl
void master_udp::service_main(ACL_VSTREAM *stream, char*, char**)
{
	acl_assert(__mu != NULL);

	socket_stream* ss = (socket_stream*) stream->context;
	if (ss == NULL)
	{
		// 当本函数第一次被调用时,需要打开 socket_stream 流
		ss = NEW socket_stream();
		if (ss->open(stream) == false)
			logger_fatal("open stream error!");
		stream->context = ss;
		acl_vstream_add_close_handle(stream, on_close, ss);
	}

#ifndef	ACL_WINDOWS
	if (__mu->daemon_mode_)
		acl_watchdog_pat();  // 必须通知 acl_master 框架一下
#endif
	__mu->on_read(ss);
}
コード例 #5
0
ファイル: multi_proxy.c プロジェクト: aaronshang/acl
static void __service(ACL_VSTREAM *stream, char *service, char **argv)
{
	char  myname[] = "__service";
	int   n, ret;
	VSTREAM_PROXY_OBJ *vpobj, *peer;

	/*
	 * Sanity check. This service takes no command-line arguments.
	 */
	if (argv[0])
		acl_msg_fatal("%s(%d)->%s: unexpected command-line argument: %s",
				__FILE__, __LINE__, myname, argv[0]);

	if (stream == NULL)
		acl_msg_fatal("%s(%d)->%s: stream null",
				__FILE__, __LINE__, myname);
	vpobj = (VSTREAM_PROXY_OBJ *) stream->context;
	if (vpobj == NULL)
		acl_msg_fatal("%s(%d)->%s: stream's context null",
				__FILE__, __LINE__, myname);

	if (acl_msg_verbose > 3)
		acl_msg_info("%s(%d)->%s: service name = %s, rw_timeout = %d",
			__FILE__, __LINE__, myname, service, stream->rw_timeout);

	acl_watchdog_pat();

	peer = vpobj->peer;
	if (peer == NULL || peer->stream == NULL || peer->peer != vpobj) {
		acl_multi_server_disconnect(stream);
		return;
	}

	acl_multi_server_cancel_rw_timer(peer->stream);

	n = acl_vstream_read(stream, __data_buf, var_proxy_bufsize);
	if (n == ACL_VSTREAM_EOF) {
		acl_multi_server_disconnect(stream);
		if (acl_msg_verbose > 3)
			acl_msg_info("%s(%d)->%s: read over",
				__FILE__, __LINE__, myname);
		return;
	}

	if (vpobj->flag == VSTREAM_PROXY_FRONT_FLAG && __request_stream) {
		ret = acl_vstream_writen(__request_stream, __data_buf, n);
		if (ret != n) {
			acl_msg_error("%s(%d)->%s: writen to %s, serr = %s",
					__FILE__, __LINE__, myname,
					var_proxy_request_file, strerror(errno));
			acl_vstream_close(__request_stream);
			__request_stream = NULL;
		}
	} else if (vpobj->flag == VSTREAM_PROXY_BACKEND_FLAG && __respond_stream) {
		ret = acl_vstream_writen(__respond_stream, __data_buf, n);
		if (ret != n) {
			acl_msg_error("%s(%d)->%s: writen to %s, serr = %s",
					__FILE__, __LINE__, myname,
					var_proxy_request_file, strerror(errno));
			acl_vstream_close(__respond_stream);
			__respond_stream = NULL;
		}
	}

	ret = acl_vstream_writen(peer->stream, __data_buf, n);
	if (ret != n) {
		acl_multi_server_disconnect(peer->stream);
		if (acl_msg_verbose > 3)
			acl_msg_info("%s(%d)->%s: write error = %s",
				__FILE__, __LINE__, myname,
				strerror(errno));
		return;
	}

	acl_multi_server_request_rw_timer(stream);
	acl_multi_server_request_rw_timer(peer->stream);
}