diff options
Diffstat (limited to 'lib/kernel/src/gen_tcp.erl')
| -rw-r--r-- | lib/kernel/src/gen_tcp.erl | 57 | 
1 files changed, 16 insertions, 41 deletions
| diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl index d7dba4ac80..ac61dbc792 100644 --- a/lib/kernel/src/gen_tcp.erl +++ b/lib/kernel/src/gen_tcp.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %%  -%% Copyright Ericsson AB 1997-2013. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved.  %%   %% Licensed under the Apache License, Version 2.0 (the "License");  %% you may not use this file except in compliance with the License. @@ -96,17 +96,17 @@          tos |  	ipv6_v6only.  -type connect_option() :: -        {ip, inet:ip_address()} | +        {ip, inet:socket_address()} |          {fd, Fd :: non_neg_integer()} | -        {ifaddr, inet:ip_address()} | +        {ifaddr, inet:socket_address()} |          inet:address_family() |          {port, inet:port_number()} |          {tcp_module, module()} |          option().  -type listen_option() :: -        {ip, inet:ip_address()} | +        {ip, inet:socket_address()} |          {fd, Fd :: non_neg_integer()} | -        {ifaddr, inet:ip_address()} | +        {ifaddr, inet:socket_address()} |          inet:address_family() |          {port, inet:port_number()} |          {backlog, B :: non_neg_integer()} | @@ -114,14 +114,15 @@          option().  -type socket() :: port(). --export_type([option/0, option_name/0, connect_option/0, listen_option/0]). +-export_type([option/0, option_name/0, connect_option/0, listen_option/0, +              socket/0]).  %%  %% Connect a socket  %%  -spec connect(Address, Port, Options) -> {ok, Socket} | {error, Reason} when -      Address :: inet:ip_address() | inet:hostname(), +      Address :: inet:socket_address() | inet:hostname(),        Port :: inet:port_number(),        Options :: [connect_option()],        Socket :: socket(), @@ -132,7 +133,7 @@ connect(Address, Port, Opts) ->  -spec connect(Address, Port, Options, Timeout) ->                       {ok, Socket} | {error, Reason} when -      Address :: inet:ip_address() | inet:hostname(), +      Address :: inet:socket_address() | inet:hostname(),        Port :: inet:port_number(),        Options :: [connect_option()],        Timeout :: timeout(), @@ -150,8 +151,8 @@ connect(Address, Port, Opts, Time) ->  	Error -> Error      end. -connect1(Address,Port,Opts,Timer) -> -    Mod = mod(Opts, Address), +connect1(Address, Port, Opts0, Timer) -> +    {Mod, Opts} = inet:tcp_module(Opts0, Address),      case Mod:getaddrs(Address,Timer) of  	{ok,IPs} ->  	    case Mod:getserv(Port) of @@ -184,8 +185,8 @@ try_connect([], _Port, _Opts, _Timer, _Mod, Err) ->        ListenSocket :: socket(),        Reason :: system_limit | inet:posix(). -listen(Port, Opts) -> -    Mod = mod(Opts, undefined), +listen(Port, Opts0) -> +    {Mod, Opts} = inet:tcp_module(Opts0),      case Mod:getserv(Port) of  	{ok,TP} ->  	    Mod:listen(TP, Opts); @@ -319,7 +320,7 @@ unrecv(S, Data) when is_port(S) ->  -spec controlling_process(Socket, Pid) -> ok | {error, Reason} when        Socket :: socket(),        Pid :: pid(), -      Reason :: closed | not_owner | inet:posix(). +      Reason :: closed | not_owner | badarg | inet:posix().  controlling_process(S, NewOwner) ->      case inet_db:lookup_socket(S) of @@ -334,32 +335,6 @@ controlling_process(S, NewOwner) ->  %%  %% Create a port/socket from a file descriptor   %% -fdopen(Fd, Opts) -> -    Mod = mod(Opts, undefined), +fdopen(Fd, Opts0) -> +    {Mod, Opts} = inet:tcp_module(Opts0),      Mod:fdopen(Fd, Opts). - -%% Get the tcp_module, but IPv6 address overrides default IPv4 -mod(Address) -> -    case inet_db:tcp_module() of -	inet_tcp when tuple_size(Address) =:= 8 -> -	    inet6_tcp; -	Mod -> -	    Mod -    end. - -%% Get the tcp_module, but option tcp_module|inet|inet6 overrides -mod([{tcp_module,Mod}|_], _Address) -> -    Mod; -mod([inet|_], _Address) -> -    inet_tcp; -mod([inet6|_], _Address) -> -    inet6_tcp; -mod([{ip, Address}|Opts], _) -> -    mod(Opts, Address); -mod([{ifaddr, Address}|Opts], _) -> -    mod(Opts, Address); -mod([_|Opts], Address) -> -    mod(Opts, Address); -mod([], Address) -> -    mod(Address). - | 
