Exemple #1
0
static
void pscom_process_rreq(psmxm_recv_req_t *rreq)
{
	pscom_con_t *con = (pscom_con_t *)psmxm_recv_req_ctx(rreq);
	size_t length = psmxm_recv_req_length(rreq);

	pscom_read_done(con, rreq->data, length);
	psmxm_recv_release(rreq);
}
Exemple #2
0
static
int shm_do_read(pscom_poll_reader_t *reader)
{
	pscom_con_t *con = list_entry(reader, pscom_con_t, poll_reader);
	int ret;
	char *buf;
	unsigned int len;

	ret = shm_canrecv(&con->arch.shm);
	if (ret) {
		shm_recvstart(&con->arch.shm, &buf, &len);
		pscom_read_done(con, buf, len);
		shm_recvdone(&con->arch.shm);
	}
	return ret;
}
Exemple #3
0
static
int _pscom_extoll_rma2_do_read(pscom_con_t *con, psex_con_info_t *ci)
{
	void *buf;
	int size;

	size = psex_recvlook(ci, &buf);

	if (size >= 0) {
		pscom_read_done(con, buf, size);

		psex_recvdone(ci);
		return 1;
	} else if ((size == -EINTR) || (size == -EAGAIN)) {
		// Nothing received
		return 0;
	} else {
		// Error
		errno = -size;
		pscom_con_error(con, PSCOM_OP_READ, PSCOM_ERR_STDERROR);
		return 1;
	}
}
Exemple #4
0
static
void tcp_do_read(ufd_t *ufd, ufd_funcinfo_t *ufd_info)
{
	pscom_con_t *con = (pscom_con_t *) ufd_info->priv;

	char *buf;
	size_t len;
	ssize_t rlen;

	pscom_read_get_buf(con, &buf, &len);

	rlen = recv(con->arch.tcp.ufd_info.fd, buf, len, MSG_NOSIGNAL | MSG_DONTWAIT);
	if (rlen >= 0) {
		pscom_read_done(con, buf, rlen);
	} else if ((errno != EINTR) && (errno != EAGAIN)) {
		goto err_con_broken;
	}

	return;
	/* --- */
err_con_broken:
	pscom_con_error(con, PSCOM_OP_READ, PSCOM_ERR_STDERROR);
	return;
}
Exemple #5
0
static
int _pscom_openib_do_read(pscom_con_t *con, psoib_con_info_t *mcon)
{
	void *buf;
	ssize_t size;

	size = psoib_recvlook(mcon, &buf);

	if (size >= 0) {
		perf_add("openib_do_read");
		pscom_read_done(con, buf, size);

		psoib_recvdone(mcon);
		return 1;
	} else if ((size == -EINTR) || (size == -EAGAIN)) {
		// Nothing received
		return 0;
	} else {
		// Error
		errno = -size;
		pscom_con_error(con, PSCOM_OP_READ, PSCOM_ERR_STDERROR);
		return 1;
	}
}