ceph通信(2)——AsyncMessenger::bind绑定端口

|—ms_public->bind(g_conf->public_addr); // AsyncMessenger::bind(const entity_addr_t &bind_addr) // 入参 bind_addr=”本节点IP:0/0”
|—for (auto &&p : processors)
|— p->bind(bind_addr, avoid_ports, &bound_addr); // int Processor::bind(const entity_addr_t &bind_addr, const set& avoid_ports, entity_addr_t* bound_addr)
|—SocketOptions opts
|—opts.nodelay = msgr->cct->_conf->ms_tcp_nodelay;
|—opts.rcbuf_size = msgr->cct->_conf->ms_tcp_rcvbuf;
|—entity_addr_t listen_addr = bind_addr;
|—listen_addr.set_family(family);
|—if (listen_addr.get_port()) // 此时端口为0,条件不成立。如果条件成立则监听该端口
|—worker->center.submit_to(worker->center.get_id(),
this, &listen_addr, &opts, &r { r = worker->listen(listen_addr, opts, &listen_socket); }, false);
|—else // 获取端口
|—for (int port = msgr->cct->_conf->ms_bind_port_min; port <= msgr->cct->_conf->ms_bind_port_max; port++)
|—worker->center.submit_to(worker->center.get_id(),
this, &listen_addr, &opts, &r { r = worker->listen(listen_addr, opts, &listen_socket); }, false)
|—PosixWorker::listen(entity_addr_t &sa, const SocketOptions &opt, ServerSocket *sock) // submit_to调用该函数监听端口
|—int listen_sd = net.create_socket(sa.get_family(), true)
|—int r = net.set_nonblock(listen_sd);
|—net.set_close_on_exec(listen_sd)
|—r = net.set_socket_options(listen_sd, opt.nodelay, opt.rcbuf_size)
|—r = ::bind(listen_sd, sa.get_sockaddr(), sa.get_sockaddr_len())
|—r = ::listen(listen_sd, cct->_conf->ms_tcp_listen_backlog)
|—*sock = ServerSocket(std::unique_ptr(new PosixServerSocketImpl(net, listen_sd)))
|—bound on random port 本节点IP:端口/0
|—bound to 本节点IP:端口/进程ID
|—_finish_bind(bind_addr, bound_addr);
|—bind my_inst.addr is 本节点IP:端口/进程ID

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值