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); }
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(); }
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; }
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); }
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); }