ssize_t sock_comm_send(struct sock_pe_entry *pe_entry, const void *buf, size_t len) { ssize_t ret, used; if (len > pe_entry->cache_sz) { used = ofi_rbused(&pe_entry->comm_buf); if (used == sock_comm_flush(pe_entry)) { return sock_comm_send_socket(pe_entry->conn, buf, len); } else { return 0; } } if (ofi_rbavail(&pe_entry->comm_buf) < len) { ret = sock_comm_flush(pe_entry); if (ret <= 0) return 0; } ret = MIN(ofi_rbavail(&pe_entry->comm_buf), len); ofi_rbwrite(&pe_entry->comm_buf, buf, ret); ofi_rbcommit(&pe_entry->comm_buf); SOCK_LOG_DBG("buffered %lu\n", ret); return ret; }
ssize_t sock_comm_send(struct sock_conn *conn, const void *buf, size_t len) { ssize_t ret, used; if (len >= SOCK_COMM_THRESHOLD) { used = rbused(&conn->outbuf); if (used == sock_comm_flush(conn)) { return sock_comm_send_socket(conn, buf, len); } else { return 0; } } if (rbavail(&conn->outbuf) < len) { ret = sock_comm_flush(conn); if (ret <= 0) return 0; } ret = MIN(rbavail(&conn->outbuf), len); rbwrite(&conn->outbuf, buf, ret); rbcommit(&conn->outbuf); SOCK_LOG_INFO("buffered %lu\n", ret); return ret; }