aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded/src/socket.erl
diff options
context:
space:
mode:
Diffstat (limited to 'erts/preloaded/src/socket.erl')
-rw-r--r--erts/preloaded/src/socket.erl19
1 files changed, 14 insertions, 5 deletions
diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl
index bab4fce3f3..5a0748e8fb 100644
--- a/erts/preloaded/src/socket.erl
+++ b/erts/preloaded/src/socket.erl
@@ -324,7 +324,9 @@
mincost |
integer().
--type socket_info() :: map().
+-type socket_info() :: #{domain => domain(),
+ type => type(),
+ protocol => protocol()}.
-record(socket, {info :: socket_info(),
ref :: reference()}).
%% -opaque socket() :: {socket, socket_info(), reference()}.
@@ -671,10 +673,17 @@ bind(Socket, File) when is_list(File) andalso (File =/= []) ->
true ->
{error, einval}
end;
-bind(#socket{ref = SockRef} = _Socket, SockAddr)
- when is_record(SockAddr, in4_sockaddr) orelse
- is_record(SockAddr, in6_sockaddr) orelse
- (SockAddr =:= any) orelse (SockAddr =:= loopback) ->
+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).