美文网首页
接收连接basic_socket_acceptor

接收连接basic_socket_acceptor

作者: 长不胖的Garfield | 来源:发表于2017-01-19 21:43 被阅读0次

    概述

    TCP有一处和UDP不同的地方是TCP是面向连接的,TCP有建立连接、通信、关闭连接的操作,Boost.Asio提供了ip::tcp::acceptor用来接收新的TCP连接,底层由socket_acceptor_service提供连接服务, basic_socket_acceptor作为连接接收类模板,当由acceptor获取到远程连接socket后,即可使用socket进行后续通信操作。

    操作步骤

    1. 使用io_service构造acceptor
    2. 打开acceptor
    3. 设置选项[可选]
    4. 绑定监听端口
    5. 开始监听
    6. 同步/异步接收连接
    7. 关闭

    操作说明

    basic_socket_acceptor针对每个步骤都提供了相应的方法,同时也提供了一些构造函数可以直接合并几个步骤的操作;

    方法名 说明
    open 打开acceptor
    is_open 是否已打开
    bind 绑定到指定端口,端口应该为本地端口
    listen 监听指定端口
    close 关闭acceptor,任何异步accept会被立即取消,再次使用必须再调用open
    cancel 取消acceptor上的异步操作,会引起异步连接、发送、接收操作的立即完成,错误码为error::operation_aborted
    set_option 设置选项
    get_option 获取选项
    accept 同步连接获取
    async_accept 异步连接获取

    使用方法

    通常情况下,如果在构造时指定要绑定的本地端口,即可直接进行accept操作,譬如:

    tcp::accptor acceptor(io_service,endpoint,reuse_addr);
    
    acceptor.accept(socket,ec);
    

    如果构造时没有提供本地端口,则需要进行打开、绑定、监听等动作之后才可以进行accept操作,譬如:

    tcp::acceptor acceptor(io_service);
    acceptor.open(endpoint.protocol());
    if (reuse_addr)
       acceptor.set_option(socket_base::reuse_address(true));
    acceptor.bind(endpoint);
    acceptor.listen(listen_backlog);
    
    acceptor.accept(socket,ec);
    

    相关文章

      网友评论

          本文标题:接收连接basic_socket_acceptor

          本文链接:https://www.haomeiwen.com/subject/chzibttx.html