From b63a16d0958bd748644d22f13f35f8956a903d6c Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Mon, 18 Jun 2018 18:19:39 +0200 Subject: [socket+net-nif] Moved common functions into util files The common stuff, like decode and encode of common types (soch as socket address), has been moved into a util file (socket_util). The debug stuff has also been moved into its own file. Also introduced a common include file for common macros and types. OTP-14831 --- erts/preloaded/src/socket.erl | 56 ++++++++++--------------------------------- 1 file changed, 12 insertions(+), 44 deletions(-) (limited to 'erts/preloaded/src/socket.erl') diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl index b89fa06da8..ba3ff6bab9 100644 --- a/erts/preloaded/src/socket.erl +++ b/erts/preloaded/src/socket.erl @@ -657,7 +657,7 @@ open(Domain, Type, Protocol0, Extra) when is_map(Extra) -> end. %% Note that this is just a convenience function for when the protocol was -%% not specified. If its actually specied, then that will be selected. +%% not specified. If its actually specified, then that will be selected. %% Also, this only works for the some of the type's (stream, dgram and %% seqpacket). default_protocol(null, stream) -> tcp; @@ -677,57 +677,22 @@ default_protocol(Protocol, _) -> Protocol. Addr :: any | loopback | sockaddr(), Reason :: term(). -bind(#socket{info = #{domain := inet}} = Socket, Addr) +bind(#socket{ref = SockRef, info = #{domain := inet}} = _Socket, Addr) when ((Addr =:= any) orelse (Addr =:= loopback)) -> - bind(Socket, ?SOCKADDR_IN4_DEFAULT(Addr)); -bind(#socket{info = #{domain := inet6}} = Socket, Addr) + nif_bind(SockRef, ?SOCKADDR_IN4_DEFAULT(Addr)); +bind(#socket{ref = SockRef, info = #{domain := inet6}} = _Socket, Addr) when ((Addr =:= any) orelse (Addr =:= loopback)) -> - bind(Socket, ?SOCKADDR_IN6_DEFAULT(Addr)); -bind(Socket, Addr) -> + nif_bind(SockRef, ?SOCKADDR_IN6_DEFAULT(Addr)); +bind(#socket{ref = SockRef} = _Socket, Addr) when is_map(Addr) -> try begin - nif_bind(Socket, ensure_sockaddr(Addr)) + nif_bind(SockRef, ensure_sockaddr(Addr)) end catch throw:ERROR -> ERROR end. -%% -spec bind(Socket, FileOrAddr) -> ok | {error, Reason} when -%% Socket :: socket(), -%% FileOrAddr :: binary() | string() | in_sockaddr() | any | loopback, -%% Reason :: term(). - -%% bind(Socket, File) when is_binary(File) -> -%% if -%% byte_size(File) =:= 0 -> -%% {error, einval}; -%% byte_size(File) =< 255 -> -%% nif_bind(Socket, File); -%% true -> -%% {error, einval} -%% end; -%% bind(Socket, File) when is_list(File) andalso (File =/= []) -> -%% Bin = unicode:characters_to_binary(File, file:native_name_encoding()), -%% if -%% byte_size(Bin) =< 255 -> -%% nif_bind(Socket, Bin); -%% true -> -%% {error, einval} -%% end; -%% bind(#socket{info = #{domain := inet}} = Socket, Addr) -%% when ((Addr =:= any) orelse (Addr =:= loopback)) -> -%% bind(Socket, #in4_sockaddr{addr = Addr}); -%% bind(#socket{info = #{domain := inet6}} = Socket, Addr) -%% when ((Addr =:= any) orelse (Addr =:= loopback)) -> -%% bind(Socket, #in6_sockaddr{addr = Addr}); -%% bind(#socket{info = #{domain := inet}, ref = SockRef} = _Socket, SockAddr) -%% when is_record(SockAddr, in4_sockaddr) -> -%% nif_bind(SockRef, SockAddr); -%% bind(#socket{info = #{domain := inet6}, ref = SockRef} = _Socket, SockAddr) -%% when is_record(SockAddr, in6_sockaddr) -> -%% nif_bind(SockRef, SockAddr). - %% =========================================================================== @@ -749,6 +714,9 @@ connect(Socket, SockAddr) -> Timeout :: timeout(), Reason :: term(). +%% +%% Is it possible to connect with family = local for the (dest) sockaddr? +%% connect(_Socket, _SockAddr, Timeout) when (is_integer(Timeout) andalso (Timeout =< 0)) -> {error, timeout}; @@ -970,9 +938,9 @@ sendto(Socket, Data, Flags, Dest) -> Timeout :: timeout(), Reason :: term(). -sendto(Socket, Data, Flags, DestSockAddr, Timeout) when is_list(Data) -> +sendto(Socket, Data, Flags, Dest, Timeout) when is_list(Data) -> Bin = erlang:list_to_binary(Data), - sendto(Socket, Bin, Flags, DestSockAddr, Timeout); + sendto(Socket, Bin, Flags, Dest, Timeout); sendto(#socket{ref = SockRef}, Data, Flags, Dest, Timeout) when is_binary(Data) andalso is_list(Flags) andalso -- cgit v1.2.3