int cb_conn(ZEVENT * zev, void *context) { int fd; int events; ZEVENT *zev2; events = zevent_get_events(zev); zevent_set(zev, ZEVENT_TIMEOUT, 0, 0, 2000); if (events & ZEVENT_TIMEOUT) { zlog_info("no connection in the past 2 secs: %lu", time(0)); return -1; } fd = zsocket_inet_accept(zevent_get_fd(zev)); if (fd < 0) { return -2; } char hostbuf[16]; int host, port; zdns_getpeer_r(fd, &host, &port); zdns_inet_ntoa_r((struct in_addr *)&host, hostbuf); zlog_info("new connection: %d: (%s:%d)", fd, hostbuf, port); zev2 = (ZEVENT *) zmalloc(sizeof(ZEVENT)); zevent_init(zev2, zevent_get_base(zev), fd); zevent_set(zev2, ZEVENT_WRITE, cb_write, 0, 8000); return 0; }
int main(int argc,const char * const argv[]) { if(zevent_init(file,&pglobal)==-1) return -1; zevent_hook_child_init(zevent_init_child,NULL,NULL,APR_HOOK_MIDDLE); zevent_hook_child_fini(zevent_fini_child,NULL,NULL,APR_HOOK_MIDDLE); zevent_hook_process_connection(zevent_process_connection,NULL,NULL,APR_HOOK_REALLY_LAST); zevent_run(pglobal); zevent_fini(&pglobal); return 0; }
int main(int argc, char **argv) { int port; int sock; ZEVENT_BASE *eb; ZEVENT zev; ZTIMER tm; port = 99; eb = zevent_base_create(); sock = zsocket_inet_listen(0, port, 5); zio_nonblocking(sock, 1); ztimer_init(&tm, eb); ztimer_set(&tm, timer_cb, 0, 10 * 1000); zevent_init(&zev, eb, sock); zevent_set(&zev, ZEVENT_READ, cb_conn, 0, 2000); unsigned long t1; t1 = time(0); int t1flag = 1; while (1) { zevent_base_dispatch(eb, 0); if (t1flag && (time(0) - t1) > 10) { t1flag = 0; close(sock); printf("close\n"); } } return 0; }
static void zmaster_server_register_one(char *service_str, ZMASTER_SERVER_SERVICE * service_list) { ZMASTER_SERVER_SERVICE *service; int type, sock_fd; ZEVENT *zev; ___ACCEPT_CONTEXT *a_c; char _service_str[1024]; char *stype, *uri, *p; strcpy(_service_str, service_str); stype = _service_str; p = strstr(_service_str, "://"); if (p) { *p = 0; uri = p + 3; } else { stype = "zdefault"; uri = _service_str; } if (!z_master_server_test_mode) { p = strchr(uri, ':'); if (p == 0) { zlog_fatal("%s: args error: %s", zvar_program_name, service_str); } *p = 0; type = *uri; sock_fd = atoi(p + 1); } else { char *host_path; int port; ___ziuf_parse(uri, type, host_path, port); if (type == ZSOCKET_TYPE_INET) { sock_fd = zsocket_inet_listen(host_path, port, -1); } else if (type == ZSOCKET_TYPE_UNIX) { sock_fd = zsocket_unix_listen(host_path, -1, 1, 0); } else if (type == ZSOCKET_TYPE_FIFO) { sock_fd = zsocket_fifo_listen(host_path, 1, 0); } else { sock_fd = -1; zlog_fatal("%s: args error: %s", zvar_program_name, service_str); } if (sock_fd < 0) { zlog_fatal("%s: open: %s error (%m)", zvar_program_name, service_str); } } service = zmaster_server_register_find_service(service_list, stype); if (service->raw_flag) { if (service->callback) { service->callback(sock_fd, service->ctx, type); } return; } a_c = (___ACCEPT_CONTEXT *) zmalloc(sizeof(___ACCEPT_CONTEXT)); a_c->callback = service->callback; a_c->type = type; a_c->ctx = service->ctx; zio_close_on_exec(sock_fd, 1); zio_nonblocking(sock_fd, 1); zev = (ZEVENT *) zmalloc(sizeof(ZEVENT)); zevent_init(zev, zvar_default_event_base, sock_fd); zevent_set(zev, ZEVENT_READ, zmaster_server_accept, a_c, 0); zarray_enter(z_master_server_listen_fd_list, ZINT_TO_VOID_PTR(sock_fd)); }