aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/src/inet6_sctp.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel/src/inet6_sctp.erl')
-rw-r--r--lib/kernel/src/inet6_sctp.erl75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/kernel/src/inet6_sctp.erl b/lib/kernel/src/inet6_sctp.erl
new file mode 100644
index 0000000000..5c49c4fec3
--- /dev/null
+++ b/lib/kernel/src/inet6_sctp.erl
@@ -0,0 +1,75 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%% SCTP protocol contribution by Leonid Timochouk and Serge Aleynikov.
+%% See also: $ERL_TOP/lib/kernel/AUTHORS
+%%
+%%
+-module(inet6_sctp).
+
+%% This module provides functions for communicating with
+%% sockets using the SCTP protocol. The implementation assumes that
+%% the OS kernel supports SCTP providing user-level SCTP Socket API:
+%% http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13
+
+-include("inet_sctp.hrl").
+-include("inet_int.hrl").
+
+-define(FAMILY, inet6).
+-export([getserv/1,getaddr/1,getaddr/2,translate_ip/1]).
+-export([open/1,close/1,listen/2,connect/5,sendmsg/3,recv/2]).
+
+
+
+getserv(Port) when is_integer(Port) -> {ok, Port};
+getserv(Name) when is_atom(Name) ->
+ inet:getservbyname(Name, sctp);
+getserv(_) ->
+ {error,einval}.
+
+getaddr(Address) ->
+ inet:getaddr(Address, ?FAMILY).
+getaddr(Address, Timer) ->
+ inet:getaddr_tm(Address, ?FAMILY, Timer).
+
+translate_ip(IP) ->
+ inet:translate_ip(IP, ?FAMILY).
+
+
+
+open(Opts) ->
+ case inet:sctp_options(Opts, ?MODULE) of
+ {ok,#sctp_opts{fd=Fd,ifaddr=Addr,port=Port,opts=SOs}} ->
+ inet:open(Fd, Addr, Port, SOs, sctp, ?FAMILY, ?MODULE);
+ Error -> Error
+ end.
+
+close(S) ->
+ prim_inet:close(S).
+
+listen(S, Flag) ->
+ prim_inet:listen(S, Flag).
+
+connect(S, Addr, Port, Opts, Timer) ->
+ inet_sctp:connect(S, Addr, Port, Opts, Timer).
+
+sendmsg(S, SRI, Data) ->
+ prim_inet:sendmsg(S, SRI, Data).
+
+recv(S, Timeout) ->
+ prim_inet:recvfrom(S, 0, Timeout).