示例#1
0
文件: event.c 项目: mailhonor/libzc
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;
}
示例#2
0
文件: echo.c 项目: breezechen/zevent
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;
}
示例#3
0
文件: event.c 项目: mailhonor/libzc
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;
}
示例#4
0
文件: server.c 项目: mailhonor/libzc
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));
}