Current section
Files
Jump to
Current section
Files
lib/utilities/network.ex
defmodule Mdns.Utilities.Network do
@sol_socket 0xFFFF
@so_reuseport 0x0200
@so_reuseaddr 0x0004
@spec reuse_port :: [{:raw, 65535, 512 | 4, <<_::32>>}]
def reuse_port do
case :os.type() do
{:unix, :linux} ->
reuse_port_linux()
{:unix, os_name} when os_name in [:darwin, :freebsd, :openbsd, :netbsd] ->
get_reuse_port()
{:win32, _unused} ->
get_reuse_address()
_ ->
[]
end
end
def mdns_port, do: Application.get_env(:mdns, :port, 5353)
def mdns_group, do: {224, 0, 0, 251}
defp reuse_port_linux() do
case :os.version() do
{major, minor, _} when major > 3 or (major == 3 and minor >= 9) ->
get_reuse_port()
_before_3_9 ->
get_reuse_address()
end
end
defp get_reuse_port(), do: [{:raw, @sol_socket, @so_reuseport, <<1::native-32>>}]
defp get_reuse_address(), do: [{:raw, @sol_socket, @so_reuseaddr, <<1::native-32>>}]
end