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); }
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; }
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; } }
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; }
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; } }