当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang recv(Socket)用法及代码示例


recv(Socket) ->
        {ok, {FromIP, FromPort, AncData, Data}} | {error, Reason}
recv(Socket, Timeout) ->
        {ok, {FromIP, FromPort, AncData, Data}} | {error, Reason}
类型:
Socket = sctp_socket()
Timeout = timeout()
FromIP = inet:ip_address()
FromPort = inet:port_number()
AncData = [#sctp_sndrcvinfo{} | inet:ancillary_data()]
Data = 
 binary() |
 string() |
    #sctp_sndrcvinfo{} |
    #sctp_assoc_change{} |
    #sctp_paddr_change{} |
    #sctp_adaptation_event{}
Reason = 
 inet:posix() |
    #sctp_send_failed{} |
    #sctp_paddr_change{} |
    #sctp_pdapi_event{} |
    #sctp_remote_error{} |
    #sctp_shutdown_event{}

从套接字的任何关联接收 Data 消息。如果接收超时,则返回{error,timeout}。默认 time-out 是 infinityFromIPFromPort表示发送方的地址。

AncData是可以与主要数据一起接收的辅助数据项的列表Data。该列表可以为空,也可以包含一个#sctp_sndrcvinfo{}记录是否启用了此类辅助数据的接收(请参阅选项sctp_events)。默认情况下启用它,因为此类辅助数据提供了一种简单的方法来确定接收消息的关联和流。 (另一种方法是从FromIPFromPort使用套接字选项sctp_get_peer_addr_info,但这仍然不会产生流编号)。

AncData还可能包含辅助数据从插座选项 recvtos,recvtclass或者recvttl,如果套接字平台支持的话。

接收到的 Data 可以是 binary()list() 字节(0 到 255 范围内的整数),具体取决于套接字模式或 SCTP 事件。

可能的 SCTP 事件:

  • #sctp_sndrcvinfo{}
  • #sctp_assoc_change{}
  • #sctp_paddr_change{
          addr      = {ip_address(),port()},
          state     = atom(),
          error     = integer(),
          assoc_id  = assoc_id()
    }

    表示关联 assoc_id 内由 addr 指定的对等方的 IP 地址状态发生变化。 state 的可能值(大部分是不言自明的)包括:


    addr_unreachable

    addr_available

    addr_removed

    addr_added

    addr_made_prim

    addr_confirmed

    如果出现错误(例如,addr_unreachable), 场地error提供更多诊断。在这种情况下,事件#sctp_paddr_change{}会自动转换成error返回的术语recv.这error字段值可以使用以下方式转换为字符串error_string/1.

  • #sctp_send_failed{
          flags     = true | false,
          error     = integer(),
          info      = #sctp_sndrcvinfo{},
          assoc_id  = assoc_id()
          data      = binary()
    }

    如果发送操作失败,发送者可以收到此事件。


    flags

    一个布尔值,指定数据是否已通过线路传输。


    error

    提供扩展诊断、使用error_string/1


    info

    原本的#sctp_sndrcvinfo{}失败时使用的记录send/*


    data

    尝试发送整个原始数据块。

    在 Erlang/SCTP 绑定的当前实现中,此事件在内部转换为error返回的术语recv/*.

  • #sctp_adaptation_event{
          adaptation_ind = integer(),
          assoc_id       = assoc_id()
    }

    当对端发送适配层指示参数时下发(通过选项配置)sctp_adaptation_layer)。请注意,在 Erlang/SCTP 绑定的当前实现中,默认情况下禁用此事件。

  • #sctp_pdapi_event{
          indication = sctp_partial_delivery_aborted,
          assoc_id   = assoc_id()
    }

    部分交付失败。在 Erlang/SCTP 绑定的当前实现中,此事件在内部转换为error返回的术语recv/*.

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 recv(Socket) -> {ok, {FromIP, FromPort, AncData, Data}} | {error, Reason}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。