'How to use the Socket module *and* set ipv6_v6only?
I create an UDP socket with the Socket module and version: 6. I want it to listen only to IPv6 (by default, version: 6 listens on both v4 and v6). Erlang's inet module has a ipv6_v6only option but I don't know how to use it when using Elixir's Socket module. Calling :inet.setopts/2 after the call to Socket.UDP.open/2 always produce a {:error, :einval}. Any code example?
(I know I can do it by tuning the net.ipv6.bindv6only sysctl on Linux but I would prefer a solution that does not require to be root.)
Solution 1:[1]
Socket.UDP.open/2 is effectively routed to :gen_udp.open/2 which accepts a keyword of type open_option() as a second argument, which is in turn an extended type option().
Somewhat alongside the following would do
Socket.UDP.socket(port, version: 6)
This could have been easily seen from the arguments/1 implementation I’ve linked above.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
