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 是 infinity 。 FromIP和FromPort表示發送方的地址。
AncData是可以與主要數據一起接收的輔助數據項的列表Data。該列表可以為空,也可以包含一個#sctp_sndrcvinfo{}記錄是否啟用了此類輔助數據的接收(請參閱選項sctp_events)。默認情況下啟用它,因為此類輔助數據提供了一種簡單的方法來確定接收消息的關聯和流。 (另一種方法是從FromIP和FromPort使用套接字選項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_unreachableaddr_availableaddr_removedaddr_addedaddr_made_primaddr_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 receive_response(RequestId, Timeout)用法及代碼示例
 - erlang recompose(URIMap)用法及代碼示例
 - erlang reverse用法及代碼示例
 - erlang rename用法及代碼示例
 - erlang remove用法及代碼示例
 - erlang registered用法及代碼示例
 - erlang register用法及代碼示例
 - erlang repair_continuation(Continuation, MatchSpec)用法及代碼示例
 - erlang register(RegName, PidOrPort)用法及代碼示例
 - erlang registered()用法及代碼示例
 - erlang read_file_info(Filename)用法及代碼示例
 - erlang read_file_info(File)用法及代碼示例
 - erlang remove(Key, Map1)用法及代碼示例
 - erlang referenced_byte_size(Binary)用法及代碼示例
 - erlang replace(Subject, Pattern, Replacement, Options)用法及代碼示例
 - erlang replace(String, SearchPattern, Replacement)用法及代碼示例
 - erlang reverse(String :: unicode:chardata())用法及代碼示例
 - erlang reverse(List1, Tail)用法及代碼示例
 - erlang replace(Subject, RE, Replacement, Options)用法及代碼示例
 - erlang relation_to_family(BinRel)用法及代碼示例
 - erlang relative_product(ListOfBinRels)用法及代碼示例
 - erlang relative_product1(BinRel1, BinRel2)用法及代碼示例
 - erlang restriction(BinRel1, Set)用法及代碼示例
 - erlang restriction(SetFun, Set1, Set2)用法及代碼示例
 - erlang resolve(RefURI, BaseURI)用法及代碼示例
 
注:本文由純淨天空篩選整理自erlang.org大神的英文原創作品 recv(Socket) -> {ok, {FromIP, FromPort, AncData, Data}} | {error, Reason}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
