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}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
