Exemplo n.º 1
0
int
nvlist_send(int sock, const nvlist_t *nvl)
{
	size_t datasize, nfds;
	int *fds;
	void *data;
	int64_t fdidx;
	int ret;

	if (nvlist_error(nvl) != 0) {
		ERRNO_SET(nvlist_error(nvl));
		return (-1);
	}

	fds = nvlist_descriptors(nvl, &nfds);
	if (fds == NULL)
		return (-1);

	ret = -1;
	data = NULL;
	fdidx = 0;

	data = nvlist_xpack(nvl, &fdidx, &datasize);
	if (data == NULL)
		goto out;

	if (buf_send(sock, data, datasize) == -1)
		goto out;

	if (nfds > 0) {
		if (fd_send(sock, fds, nfds) == -1)
			goto out;
	}

	ret = 0;
out:
	ERRNO_SAVE();
	nv_free(fds);
	nv_free(data);
	ERRNO_RESTORE();
	return (ret);
}
Exemplo n.º 2
0
int
nvlist_send(int sock, const nvlist_t *nvl)
{
	size_t datasize, nfds;
	int *fds;
	void *data;
	int64_t fdidx;
	int serrno, ret;

	if (nvlist_error(nvl) != 0) {
		errno = nvlist_error(nvl);
		return (-1);
	}

	fds = nvlist_descriptors(nvl, &nfds);
	if (fds == NULL)
		return (-1);

	ret = -1;
	data = NULL;
	fdidx = 0;

	data = nvlist_xpack(nvl, &fdidx, &datasize);
	if (data == NULL)
		goto out;

	if (buf_send(sock, data, datasize) == -1)
		goto out;

	if (nfds > 0) {
		if (fd_send(sock, fds, nfds) == -1)
			goto out;
	}

	ret = 0;
out:
	serrno = errno;
	free(fds);
	free(data);
	errno = serrno;
	return (ret);
}
Exemplo n.º 3
0
int main(void *arg)
{
        struct test17_buf_st *st = NULL;
        unsigned long long tsc, tsc2;
        int count;

        (void)arg;

        st = (struct test17_buf_st*) shm_acquire("test17_shm");

        __asm__ __volatile__("rdtsc":"=A"(tsc));
        tsc2 = tsc + 1000000000;
        assert(tsc < tsc2);
        do {
                int j;
                for (j=0; j<256; j++) {
                        buf_send((char)j, st);
                }
                count++;
                __asm__ __volatile__("rdtsc":"=A"(tsc));
        } while (tsc < tsc2);
        shm_release("test17_shm");
        return count;
}
Exemplo n.º 4
0
	  ++iov;
	  if (0 == --count)
	    break;
	}
      if (0 == count)
	break;
      iov->iov_len -= rv;
      iov->iov_base = ((char*)iov->iov_base) + rv;
    }
  return (ST_SUCCESS);
}

status_t
msg_send (int fd, msg_t * msg)
{
  mr_rarray_t rarray = SERIALIZE (msg_t, msg);
  if (NULL == rarray.data.ptr)
    return (ST_FAILURE);

  struct iovec iov[] = {
    { .iov_len = sizeof (rarray.MR_SIZE), .iov_base = &rarray.MR_SIZE, },
    { .iov_len = rarray.MR_SIZE, .iov_base = rarray.data.ptr, },
  };

  status_t status = buf_send (fd, iov, sizeof (iov) / sizeof (iov[0]));

  MR_FREE (rarray.data.ptr);

  return (status);
}