當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。