91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .rar
    金幣: 2
    下載: 1 次
    發布日期: 2021-12-04
  • 語言: C/C++
  • 標簽: rdma??send??receiv??c語言??

資源簡介

c語言利用RDMA 實現客戶端和服務器端發送接收消息。包含server.c和client.c ,gcc編譯方法和使用方法

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?

#define?TEST_NZ(x)?do?{?if?(?(x))?die(“error:?“?#x?“?failed?(returned?non-zero).“?);?}?while?(0)
#define?TEST_Z(x)??do?{?if?(!(x))?die(“error:?“?#x?“?failed?(returned?zero/null).“);?}?while?(0)

const?int?BUFFER_SIZE?=?1024;//單位為字節,此時大小為1KB
const?int?TIMEOUT_IN_MS?=?500;?/*?ms?*/

struct?context?{
??struct?ibv_context?*ctx;
??struct?ibv_pd?*pd;
??struct?ibv_cq?*cq;
??struct?ibv_comp_channel?*comp_channel;

??pthread_t?cq_poller_thread;
};

struct?connection?{
??struct?rdma_cm_id?*id;
??struct?ibv_qp?*qp;

??struct?ibv_mr?*recv_mr;
??struct?ibv_mr?*send_mr;

??char?*recv_region;
??char?*send_region;

??int?num_completions;
};

static?void?die(const?char?*reason);

static?void?build_context(struct?ibv_context?*verbs);
static?void?build_qp_attr(struct?ibv_qp_init_attr?*qp_attr);
static?void?*?poll_cq(void?*);
static?void?post_receives(struct?connection?*conn);
static?void?register_memory(struct?connection?*conn);//注冊內存

static?int?on_addr_resolved(struct?rdma_cm_id?*id);
static?void?on_completion(struct?ibv_wc?*wc);
static?int?on_connection(void?*context);
static?int?on_disconnect(struct?rdma_cm_id?*id);
static?int?on_event(struct?rdma_cm_event?*event);
static?int?on_route_resolved(struct?rdma_cm_id?*id);

static?struct?context?*s_ctx?=?NULL;

int?main(int?argc?char?**argv)
{
??struct?addrinfo?*addr;
??struct?rdma_cm_event?*event?=?NULL;
??struct?rdma_cm_id?*conn=?NULL;
??struct?rdma_event_channel?*ec?=?NULL;

??if?(argc?!=?3)
????die(“usage:?client??“);

??TEST_NZ(getaddrinfo(argv[1]?argv[2]?NULL?&addr));//addr指針參數返回一個指向addrinfo結構鏈表的指針

??TEST_Z(ec?=?rdma_create_event_channel());//創建通道,有連接請求時,用來通知應用程序的通道
??TEST_NZ(rdma_create_id(ec?&conn?NULL?RDMA_PS_TCP));//創建了rdma_cm_id對象,并將其注冊到驅動中。類似與套接字
??TEST_NZ(rdma_resolve_addr(conn?NULL?addr->ai_addr?TIMEOUT_IN_MS));//綁定一個特定的地址

??freeaddrinfo(addr);

??while?(rdma_get_cm_event(ec?&event)?==?0)?{//判斷有通道,正常情況下,會得到一個事件,也就是客戶端發起連接
????struct?rdma_cm_event?event_copy;

????memcpy(&event_copy?event?sizeof(*event));
????rdma_ack_cm_event(event);

????if?(on_event(&event_copy))
??????break;
??}

??rdma_destroy_event_channel(ec);

??return?0;
}

void?die(const?char?*reason)
{
??fprintf(stderr?“%s\n“?reason);
??exit(EXIT_FAILURE);
}

void?build_context(struct?ibv_context?*verbs)
{
??if?(s_ctx)?{
????if?(s_ctx->ctx?!=?verbs)
??????die(“cannot?handle?events?in?more?than?one?context.“);

????return;
??}

??s_ctx?=?(struct?context?*)malloc(sizeof(struct?context));

??s_ctx->ctx?=?verbs;

??TEST_Z(s_ctx->pd?=?ibv_alloc_pd(s_ctx->ctx));
??TEST_Z(s_ctx->comp_channel?=?ibv_create_comp_channel(s_ctx->ctx));
??TEST_Z(s_ctx->cq?=?ibv_create_cq(s_ctx->ctx?10?NULL?s_ctx->comp_channel?0));?/*?cqe=10?is?arbitrary?*/
??TEST_NZ(ibv_req_notify_cq(s_ctx->cq?0));

??TEST_NZ(pthread_create(&s_ctx->cq_poller_thread?NULL?poll_cq?NULL));
}

void?build_qp_attr(struc

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????7395??2019-03-18?16:14??RDMA-basic-client-server\client.c

?????文件?????????51??2019-04-10?22:08??RDMA-basic-client-server\gcc編譯.txt

?????文件????????150??2018-07-05?10:40??RDMA-basic-client-server\Makefile

?????文件???????8505??2018-11-09?16:41??RDMA-basic-client-server\server.c

?????文件?????????58??2019-04-10?22:11??RDMA-basic-client-server\使用方法.txt

?????目錄??????????0??2019-04-10?22:10??RDMA-basic-client-server

-----------?---------??----------?-----??----

????????????????16159????????????????????6


評論

共有 條評論