anchor.diff:  
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the connect timeout option
  +%% on an IPv4 TCP (stream) socket.
  +to_connect_tcp4(suite) ->
  +    [];
  +to_connect_tcp4(doc) ->
  +    [];
  +to_connect_tcp4(_Config) when is_list(_Config) ->
  +    tc_begin(to_connect_tcp4),
  +    ok = to_connect_tcp(inet),
  +    tc_end().
  +    %% not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the connect timeout option
  +%% on an IPv6 TCP (stream) socket.
  +to_connect_tcp6(suite) ->
  +    [];
  +to_connect_tcp6(doc) ->
  +    [];
  +to_connect_tcp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_connect_tcp6),
  +    %% ok = to_connect_tcp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +to_connect_tcp(Domain) ->
  +    process_flag(trap_exit, true),
  +    p("init"),
  +    Client     = self(),
  +    LocalAddr  = which_local_addr(Domain),
  +    LocalSA    = #{family => Domain, addr => LocalAddr}, 
  +    ServerName = f("~s:server", [get_tc_name()]),
  +    Server = spawn_link(fun() ->
  +                                set_tc_name(ServerName),
  +                                p("open"),
  +                                LSock = sock_open(Domain, stream, tcp),
  +                                p("bind"),
  +                                ServerLPort = sock_bind(LSock, LocalSA),
  +                                p("listen on ~w", [ServerLPort]),
  +                                sock_listen(LSock, 1),
  +                                p("inform client"),
  +                                Client ! {self(), ServerLPort},
  +                                p("await termination command"),
  +                                receive
  +                                    die ->
  +                                        p("terminating"),
  +                                        exit(normal)
  +                                end
  +                        end),
  +    
  +    p("await server port"),
  +    ServerLPort = 
  +        receive
  +            {Server, Port} ->
  +                Port
  +        end,
  +    p("open(s)"),
  +    CSock1       = sock_open(Domain, stream, tcp),
  +    CSock2       = sock_open(Domain, stream, tcp),
  +    CSock3       = sock_open(Domain, stream, tcp),
  +    p("bind(s)"),
  +    _ClientPort1 = sock_bind(CSock1, LocalSA),
  +    _ClientPort2 = sock_bind(CSock2, LocalSA),
  +    _ClientPort3 = sock_bind(CSock3, LocalSA),
  +    ServerSA = LocalSA#{port => ServerLPort},
  +    to_connect_tcp_await_timeout([CSock1, CSock2, CSock3], ServerSA),
  +    p("terminate server"),
  +    Server ! die,
  +    receive
  +        {'EXIT', Server, _} ->
  +            p("server terminated"),
  +            ok
  +    end,
  +    ok.
  +
  +
  +to_connect_tcp_await_timeout(Socks, ServerSA) ->
  +    to_connect_tcp_await_timeout(Socks, ServerSA, 1).
  +
  +to_connect_tcp_await_timeout([], _ServerSA, _ID) ->
  +    ?FAIL(unexpected_success);
  +to_connect_tcp_await_timeout([Sock|Socks], ServerSA, ID) ->
  +    p("~w: try connect", [ID]),
  +    case socket:connect(Sock, ServerSA, 5000) of
  +        {error, timeout} ->
  +            p("expected timeout (~w)", [ID]),
  +            ok;
  +        {error, Reason} ->
  +            p("failed connecting: ~p", [Reason]),
  +            ?FAIL({recv, Reason});
  +        ok ->
  +            p("unexpected success (~w) - try next", [ID]),
  +            to_connect_tcp_await_timeout(Socks, ServerSA, ID+1)
  +    end.
  +        
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the accept timeout option
  +%% on an IPv4 TCP (stream) socket.
  +to_accept_tcp4(suite) ->
  +    [];
  +to_accept_tcp4(doc) ->
  +    [];
  +to_accept_tcp4(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_accept_tcp4),
  +    %% ok = to_accept_tcp(inet),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the accept timeout option
  +%% on an IPv6 TCP (stream) socket.
  +to_accept_tcp6(suite) ->
  +    [];
  +to_accept_tcp6(doc) ->
  +    [];
  +to_accept_tcp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_accept_tcp6),
  +    %% ok = to_accept_tcp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the send timeout option
  +%% on an IPv4 TCP (stream) socket.
  +to_send_tcp4(suite) ->
  +    [];
  +to_send_tcp4(doc) ->
  +    [];
  +to_send_tcp4(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_send_tcp4),
  +    %% ok = to_send_tcp(inet),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the send timeout option
  +%% on an IPv6 TCP (stream) socket.
  +to_send_tcp6(suite) ->
  +    [];
  +to_send_tcp6(doc) ->
  +    [];
  +to_send_tcp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_send_tcp6),
  +    %% ok = to_send_tcp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the sendto timeout option
  +%% on an IPv4 UDP (dgram) socket.
  +to_sendto_udp4(suite) ->
  +    [];
  +to_sendto_udp4(doc) ->
  +    [];
  +to_sendto_udp4(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_sendto_udp4),
  +    %% ok = to_sendto_udp(inet),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the sendto timeout option
  +%% on an IPv6 UDP (dgram) socket.
  +to_sendto_udp6(suite) ->
  +    [];
  +to_sendto_udp6(doc) ->
  +    [];
  +to_sendto_udp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_sendto_udp6),
  +    %% ok = to_sendto_udp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the sendmsg timeout option
  +%% on an IPv4 TCP (stream) socket.
  +to_sendmsg_tcp4(suite) ->
  +    [];
  +to_sendmsg_tcp4(doc) ->
  +    [];
  +to_sendmsg_tcp4(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_sendmsg_tcp4),
  +    %% ok = to_sendmsg_tcp(inet),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the sendmsg timeout option
  +%% on an IPv6 TCP (stream) socket.
  +to_sendmsg_tcp6(suite) ->
  +    [];
  +to_sendmsg_tcp6(doc) ->
  +    [];
  +to_sendmsg_tcp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_sendmsg_tcp6),
  +    %% ok = to_sendmsg_tcp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recv timeout option
  +%% on an IPv4 UDP (dgram) socket. To test this we must connect
  +%% the socket.
  +to_recv_udp4(suite) ->
  +    [];
  +to_recv_udp4(doc) ->
  +    [];
  +to_recv_udp4(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_recv_udp4),
  +    %% ok = to_recv_udp(inet),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recv timeout option
  +%% on an IPv6 UDP (dgram) socket. To test this we must connect
  +%% the socket.
  +to_recv_udp6(suite) ->
  +    [];
  +to_recv_udp6(doc) ->
  +    [];
  +to_recv_udp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_recv_udp6),
  +    %% ok = to_recv_udp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recv timeout option
  +%% on an IPv4 TCP (stream) socket.
  +to_recv_tcp4(suite) ->
  +    [];
  +to_recv_tcp4(doc) ->
  +    [];
  +to_recv_tcp4(_Config) when is_list(_Config) ->
  +    tc_begin(to_recv_tcp4),
  +    ok = to_recv_tcp(inet),
  +    tc_end().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recv timeout option
  +%% on an IPv6 TCP (stream) socket.
  +to_recv_tcp6(suite) ->
  +    [];
  +to_recv_tcp6(doc) ->
  +    [];
  +to_recv_tcp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_recv_tcp6),
  +    %% ok = to_recv_tcp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +to_recv_tcp(Domain) ->
  +    process_flag(trap_exit, true),
  +    p("server -> open"),
  +    LSock     = sock_open(Domain, stream, tcp),
  +    LocalAddr = which_local_addr(Domain),
  +    LocalSA   = #{family => Domain, addr => LocalAddr}, 
  +    p("server -> bind"),
  +    ServerLPort     = sock_bind(LSock, LocalSA),
  +    p("server(~w) -> listen", [ServerLPort]),
  +    sock_listen(LSock),
  +    ClientName = f("~s:client", [get_tc_name()]),
  +    Client = spawn_link(fun() ->
  +                                set_tc_name(ClientName),
  +                                p("open"),
  +                                CSock      = sock_open(Domain, stream, tcp),
  +                                p("bind"),
  +                                ClientPort = sock_bind(CSock, LocalSA),
  +                                p("[~w] connect to ~w", 
  +                                  [ClientPort, ServerLPort]),
  +                                sock_connect(CSock, LocalSA#{port => ServerLPort}),
  +                                p("await termination command"),
  +                                receive
  +                                    die ->
  +                                        p("terminating"),
  +                                        exit(normal)
  +                                end
  +                        end),
  +    p("server -> accept on ~w", [ServerLPort]),
  +    Sock      = sock_accept(LSock),
  +    p("server -> recv"),
  +    %% The zero (0) represents "give me everything you have"
  +    case socket:recv(Sock, 0, 5000) of
  +        {error, timeout} ->
  +            p("server -> expected timeout"),
  +            ok;
  +        {ok, _Data} ->
  +            ?FAIL(unexpected_success);
  +        {error, Reason} ->
  +            ?FAIL({recv, Reason})
  +    end,
  +    Client ! die,
  +    receive
  +        {'EXIT', Client, _} ->
  +            ok
  +    end,
  +    ok.
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recvfrom timeout option
  +%% on an IPv4 UDP (dgram) socket.
  +to_recvfrom_udp4(suite) ->
  +    [];
  +to_recvfrom_udp4(doc) ->
  +    [];
  +to_recvfrom_udp4(_Config) when is_list(_Config) ->
  +    tc_begin(to_recvfrom_udp4),
  +    ok = to_recvfrom_udp(inet),
  +    tc_end().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recvfrom timeout option
  +%% on an IPv6 UDP (dgram) socket.
  +to_recvfrom_udp6(suite) ->
  +    [];
  +to_recvfrom_udp6(doc) ->
  +    [];
  +to_recvfrom_udp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_recvfrom_udp6),
  +    %% ok = to_recvfrom_udp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +to_recvfrom_udp(Domain) ->
  +    process_flag(trap_exit, true),
  +    p("init"),
  +    LocalAddr = which_local_addr(Domain),
  +    LocalSA   = #{family => Domain, addr => LocalAddr}, 
  +    p("open"),
  +    Sock      = sock_open(Domain, dgram, udp),
  +    p("bind"),
  +    _Port     = sock_bind(Sock, LocalSA),
  +    p("recv"),
  +    case socket:recvfrom(Sock, 0, 5000) of
  +        {error, timeout} ->
  +            p("expected timeout"),
  +            ok;
  +        {ok, _SrcData} ->
  +            ?FAIL(unexpected_success);
  +        {error, Reason} ->
  +            ?FAIL({recv, Reason})
  +    end,
  +    ok.
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recvmsg timeout option
  +%% on an IPv4 UDP (dgram) socket.
  +to_recvmsg_udp4(suite) ->
  +    [];
  +to_recvmsg_udp4(doc) ->
  +    [];
  +to_recvmsg_udp4(_Config) when is_list(_Config) ->
  +    %% not_yet_implemented().
  +    tc_begin(to_recvmsg_udp4),
  +    ok = to_recvmsg_udp(inet),
  +    tc_end().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recvmsg timeout option
  +%% on an IPv6 UDP (dgram) socket.
  +to_recvmsg_udp6(suite) ->
  +    [];
  +to_recvmsg_udp6(doc) ->
  +    [];
  +to_recvmsg_udp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_recvmsg_udp6),
  +    %% ok = to_recvmsg_udp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +to_recvmsg_udp(Domain) ->
  +    process_flag(trap_exit, true),
  +    p("init"),
  +    LocalAddr = which_local_addr(Domain),
  +    LocalSA   = #{family => Domain, addr => LocalAddr}, 
  +    p("open"),
  +    Sock      = sock_open(Domain, dgram, udp),
  +    p("bind"),
  +    _Port     = sock_bind(Sock, LocalSA),
  +    p("recv"),
  +    case socket:recvmsg(Sock, 5000) of
  +        {error, timeout} ->
  +            p("expected timeout"),
  +            ok;
  +        {ok, _MsgHdr} ->
  +            ?FAIL(unexpected_success);
  +        {error, Reason} ->
  +            ?FAIL({recv, Reason})
  +    end,
  +    ok.
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recvmsg timeout option
  +%% on an IPv4 TCP (stream) socket.
  +to_recvmsg_tcp4(suite) ->
  +    [];
  +to_recvmsg_tcp4(doc) ->
  +    [];
  +to_recvmsg_tcp4(_Config) when is_list(_Config) ->
  +    tc_begin(to_recvmsg_tcp4),
  +    ok = to_recvmsg_tcp(inet),
  +    tc_end().
  +    %% not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +%% This test case is intended to test the recvmsg timeout option
  +%% on an IPv6 TCP (stream) socket.
  +to_recvmsg_tcp6(suite) ->
  +    [];
  +to_recvmsg_tcp6(doc) ->
  +    [];
  +to_recvmsg_tcp6(_Config) when is_list(_Config) ->
  +    %% tc_begin(to_recvmsg_tcp6),
  +    %% ok = to_recvmsg_tcp(inet6),
  +    %% tc_end().
  +    not_yet_implemented().
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  +
  +to_recvmsg_tcp(Domain) ->
  +    process_flag(trap_exit, true),
  +    p("server -> open"),
  +    LSock     = sock_open(Domain, stream, tcp),
  +    LocalAddr = which_local_addr(Domain),
  +    LocalSA   = #{family => Domain, addr => LocalAddr}, 
  +    p("server -> bind"),
  +    ServerLPort     = sock_bind(LSock, LocalSA),
  +    p("server(~w) -> listen", [ServerLPort]),
  +    sock_listen(LSock),
  +    ClientName = f("~s:client", [get_tc_name()]),
  +    Client = spawn_link(fun() ->
  +                                set_tc_name(ClientName),
  +                                p("open"),
  +                                CSock      = sock_open(Domain, stream, tcp),
  +                                p("bind"),
  +                                ClientPort = sock_bind(CSock, LocalSA),
  +                                p("[~w] connect to ~w", 
  +                                  [ClientPort, ServerLPort]),
  +                                sock_connect(CSock, LocalSA#{port => ServerLPort}),
  +                                p("await termination command"),
  +                                receive
  +                                    die ->
  +                                        p("terminating"),
  +                                        exit(normal)
  +                                end
  +                        end),
  +    p("server -> accept on ~w", [ServerLPort]),
  +    Sock      = sock_accept(LSock),
  +    p("server -> recv"),
  +    %% The zero (0) represents "give me everything you have"
  +    case socket:recvmsg(Sock, 5000) of
  +        {error, timeout} ->
  +            p("server -> expected timeout"),
  +            ok;
  +        {ok, _Data} ->
  +            ?FAIL(unexpected_success);
  +        {error, Reason} ->
  +            ?FAIL({recv, Reason})
  +    end,
  +    Client ! die,
  +    receive
  +        {'EXIT', Client, _} ->
  +            ok
  +    end,
  +    ok.
  +
  +
  +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
   %% This gets the local address (not 127.0...)
  
positive.code:     ok = api_b_send_and_recv_udp(inet, Send, Recv),
      tc_end().
  
  
  %% Basically send and receive on an IPv4 UDP (dgram) socket
  %% using sendmsg and recvmsg.
  
negative.code:      api_b_sendmsg_and_recvmsg_tcp4
      ].
  
  op_with_timeout_cases() ->
      [
       to_connect_tcp4,
       to_connect_tcp6,
       to_accept_tcp4,
       to_accept_tcp6,
       to_send_tcp4,
       to_send_tcp6,
       to_sendto_udp4,
       to_sendto_udp6,
       to_sendmsg_tcp4,
       to_sendmsg_tcp6,
       to_recv_udp4,
       to_recv_udp6,
       to_recv_tcp4,
       to_recv_tcp6,
       to_recvfrom_udp4,
       to_recvfrom_udp6,
       to_recvmsg_udp4,
       to_recvmsg_udp6,
       to_recvmsg_tcp4,
       to_recvmsg_tcp6
      ].
  
  
  %% ticket_cases() ->
  %%     [].
  
  
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  init_per_suite(Config) ->
      Config.
  
  end_per_suite(_) ->
      ok.
  
  init_per_testcase(_TC, Config) ->
      Config.
  
  end_per_testcase(_TC, Config) ->
      Config.
  
  
  
  