<div dir="ltr"><div><div>Hi,</div><div><br></div><div>Is it safe to use the NIF socket module for UDP in production in OTP 23?</div><div>It's working in my tests but I'm not sure if it's considered unstable or if I'm missing configuration or error handling.<br></div><div><br></div><div>This is how I'm using it:</div><div><br></div><div>open() -><br></div><div>  {ok, Socket} = socket:open(inet, dgram, udp),<br>  {ok, Port} = socket:bind(Socket, any),</div><div>  {Socket, Port}.<br></div><div><br></div><div>active_once(Socket) -><br>    case socket:recvfrom(Socket, 0, [], nowait) of<br>        {ok, {#{port := Port, addr := Addr}, Data}} -><br>            {udp, Addr, Port, Data};<br>        {select, {select_info, _SelectTag, SelectRef}} -><br>            SelectRef;<br>        {error, Reason} -><br>            exit(Reason),<br>            error<br>    end.<br><br>send(Socket, Addr, Port, Data) -><br>    Dest = #{family => inet,<br>             port => Port,<br>             addr => Addr},<br>    case socket:sendto(Socket, Data, Dest, [], nowait) of<br>        ok -> ok;<br>        {select, {select_info, _SelectTag, _SelectRef}} -><br>            % need to wait for {'$socket', Socket, select, SelectRef}  and resend Data?<br>            ok<br>    end.<br><br>close(Socket) -><br>    socket:close(Socket).<br></div><div><br></div><div>% listen for select ref<br></div>handle_info({'$socket', Socket, select, SelectRef}, _State) -><br>    case socket:recvfrom(Socket, 0, [], nowait) of<br>        {ok, {#{port := Port, addr := Addr}, Data}} -><br></div><div>            % handle Data</div><div>            ok;<br></div><div>        {select, {select_info, _SelectTag, SelectRef}} -><br>               SelectRef;<br>       {error, Reason} -><br>                  exit(Reason),</div><div>         error<br></div><div>    end,<br>    {noreply, State}.</div></div>