Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang
erlang
3474-kernel-Add-inet_sockopt_SUITE-windows_reus...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 3474-kernel-Add-inet_sockopt_SUITE-windows_reuseaddr.patch of Package erlang
From 0f2fc929d7667ef84a73ab98ca9054372ff2a662 Mon Sep 17 00:00:00 2001 From: Rickard Green <rickard@erlang.org> Date: Tue, 28 Feb 2023 17:53:39 +0100 Subject: [PATCH 4/4] [kernel] Add inet_sockopt_SUITE:windows_reuseaddr --- lib/kernel/test/inet_sockopt_SUITE.erl | 55 +++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/lib/kernel/test/inet_sockopt_SUITE.erl b/lib/kernel/test/inet_sockopt_SUITE.erl index 139e7d7b92..5c95781066 100644 --- a/lib/kernel/test/inet_sockopt_SUITE.erl +++ b/lib/kernel/test/inet_sockopt_SUITE.erl @@ -59,7 +59,7 @@ large_raw/1,large_raw_getbin/1,combined/1,combined_getbin/1, ipv6_v6only_udp/1, ipv6_v6only_tcp/1, ipv6_v6only_sctp/1, use_ipv6_v6only_udp/1, - type_errors/1]). + type_errors/1, windows_reuseaddr/1]). -export([init_per_testcase/2, end_per_testcase/2]). @@ -75,7 +75,7 @@ all() -> large_raw_getbin, combined, combined_getbin, ipv6_v6only_udp, ipv6_v6only_tcp, ipv6_v6only_sctp, use_ipv6_v6only_udp, - type_errors]. + type_errors, windows_reuseaddr]. groups() -> []. @@ -805,6 +805,57 @@ type_errors(Config) when is_list(Config) -> gen_tcp:close(Sock2), ok. +windows_reuseaddr(Config) when is_list(Config) -> + %% Check that emulation of reuseaddr and reuseport on Windows + %% works as expected. That is, only set SO_REUSEADDR if both + %% reuseaddr and reuseport are set. + case os:type() of + {win32, _} -> + Port = start_helper(Config), + Def = {ask_helper(Port,?C_GET_SOL_SOCKET), + ask_helper(Port,?C_GET_SO_REUSEADDR)}, + stop_helper(Port), + {false, false} = windows_reuseaddr_test(Def, + [{reuseaddr,false},{reuseport,false}], + [{reuseaddr,false},{reuseport,false}]), + {false, false} = windows_reuseaddr_test(Def, + [{reuseaddr,true},{reuseport,false}], + [{reuseaddr,true},{reuseport,false}]), + {false, false} = windows_reuseaddr_test(Def, + [{reuseaddr,false},{reuseport,true}], + [{reuseaddr,false},{reuseport,true}]), + {true, true} = windows_reuseaddr_test(Def, + [{reuseaddr,true},{reuseport,true}], + [{reuseaddr,true},{reuseport,true}]), + ok; + _ -> + {skipped, "Test for Windows only"} + end. + +windows_reuseaddr_test({SolSocket, SoReuseaddr}, LOpts, COpts) -> + OptNames = fun (Opts) -> + lists:map(fun ({Name,_}) -> Name end, Opts) + end, + {L,A,C} = create_socketpair_init(LOpts, COpts), + {ok, LOpts} = inet:getopts(L, OptNames(LOpts)), + {ok, COpts} = inet:getopts(L, OptNames(COpts)), + RawOpts = [{raw, SolSocket, SoReuseaddr, 4}], + {ok,[{raw,SolSocket,SoReuseaddr,LRes}]} = inet:getopts(L, RawOpts), + LReuseaddr = case nintbin2int(LRes) of + 0 -> false; + _ -> true + end, + {ok,[{raw,SolSocket,SoReuseaddr,CRes}]} = inet:getopts(L, RawOpts), + CReuseaddr = case nintbin2int(CRes) of + 0 -> false; + _ -> true + end, + gen_tcp:close(L), + gen_tcp:close(A), + gen_tcp:close(C), + {LReuseaddr, CReuseaddr}. + + all_ok([]) -> true; all_ok([H|T]) when H >= 0 -> -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor