Ejemplo n.º 1
0
int init_connection(struct srv_connection *conn, int cli_ct){

	int i;

	conn->cli_ct = cli_ct;

	conn->cli = (struct client*) malloc(conn->cli_ct*sizeof(struct client));

	conn->srv_sfd = get_srv_socket();
  
	connect_clients(conn);

	conn->active_ct = conn->cli_ct;

	for(i=0; i<conn->cli_ct; i++) {
		conn->cli[i].last_hdr.code=MSG_NULL;
	} 
}
Ejemplo n.º 2
0
int cr_plugin_dump_unix_sk(int sk, int sk_id)
{
	struct sockaddr_un addr;
	socklen_t addr_len = sizeof(addr);
	char buf[4096];
	int skd, id, ret, fd, len;
	UnixTest e = UNIX_TEST__INIT;

	if (getpeername(sk, (struct sockaddr *) &addr, &addr_len)) {
		pr_perror("getpeername");
		return -1;
	}

	len = addr_len - sizeof(addr.sun_family);
	if (addr.sun_path[len - 1] == 0)
		len--;

	if (len != strlen(SK_NAME) ||
	    strncmp(addr.sun_path, SK_NAME, strlen(SK_NAME)))
		return -ENOTSUP;

	pr_info("Dump the socket %x\n", sk_id);
	skd = get_srv_socket();
	if (skd < 0)
		return -1;

	addr_len = sizeof(struct sockaddr_un);

	if (getsockname(sk, (struct sockaddr *) &addr, &addr_len) < 0)
		return -1;

	id = atoi(addr.sun_path + strlen(SK_NAME));

	ret = sprintf(buf, "d%d", id) + 1;
	if (send(skd, buf, ret, 0) < 0) {
		pr_perror("send");
		return -1;
	}

	if (recv(skd, buf, sizeof(buf), 0) <= 0)
		return -1;

	close(skd);

	e.val = atoi(buf);
	pr_err("%x: val %d\n", sk_id, e.val);
	e.name.data = (void *)addr.sun_path;
	e.name.len = addr_len - sizeof(addr.sun_family);

	snprintf(buf, sizeof(buf), "unix-test-%x.img", sk_id);
	fd = openat(criu_get_image_dir(), buf, O_WRONLY | O_CREAT, 0600);
	if (fd < 0)
		return -1;

	if (unix_test__get_packed_size(&e) > sizeof(buf)) {
		pr_err("%ld\n", unix_test__get_packed_size(&e));
		return -1;
	}

	ret = unix_test__pack(&e, (uint8_t *) buf);
	if (write(fd, buf, ret) != ret)
		return -1;
	close(fd);

	return 0;
}