I happened to be investigating something and discovered this. Since you want to recon to work for R15B02 (at least according to the README), I figured you'd want to know. Most likely you can just move the ipv6_v6only to a different optional part to fix it. If I have a chance I'll submit a pull request with the change.
Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.3.1 (abort with ^G)
1> {ok, P} = gen_udp:open (12111, [ { reuseaddr, true }, {ip, {0,0,0,0}}]).
{ok,#Port<0.824>}
2> inet:getopts(P,[active, broadcast,buffer,delay_send, dontroute,exit_on_close,header,high_watermark,keepalive,linger, low_watermark, mode, nodelay,packet, packet_size, priority,read_packets, recbuf, reuseaddr,send_timeout, sndbuf]).
{ok,[{active,true},
{broadcast,false},
{buffer,8192},
{dontroute,false},
{exit_on_close,true},
{header,0},
{keepalive,false},
{linger,{false,0}},
{mode,list},
{packet,0},
{packet_size,0},
{priority,0},
{read_packets,5},
{recbuf,16384},
{reuseaddr,true},
{sndbuf,212992}]}
3> inet:getopts(P,[active, broadcast,buffer,delay_send, dontroute,exit_on_close,header,high_watermark,keepalive,linger, low_watermark, mode, nodelay,packet, packet_size, priority,read_packets, recbuf, reuseaddr,send_timeout, sndbuf,ipv6_v6only]).
{error,einval}
4>