Skip to content

Instantly share code, notes, and snippets.

@voluntas
Last active June 12, 2019 08:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save voluntas/ad1f7b60e1592f99c42ce92964fb3b8d to your computer and use it in GitHub Desktop.
Save voluntas/ad1f7b60e1592f99c42ce92964fb3b8d to your computer and use it in GitHub Desktop.
-module(gen_udp2).
-export([open/1, open/2, close/1]).
-export([recv/3, send/4]).
open(Port) ->
open(Port, []).
open(Port, Opts) ->
Addr = proplists:get_value(ip, Opts, any),
{ok, Socket} = socket:open(inet, dgram, udp),
{ok, _OutPort} = socket:bind(Socket, #{family => inet, port => Port, addr => Addr}),
{ok, Socket}.
close(Socket) ->
ok = socket:close(Socket),
ok.
recv(Socket, Length, Timeout) ->
case socket:recvfrom(Socket, Length, [], Timeout) of
{ok, {#{family := _Family, port := Port, addr := Addr}, Data}} ->
{ok, {Addr, Port, Data}};
{error, Reason} ->
{error, Reason}
end.
send(Socket, Address, Port, Packet) ->
ok = socket:sendto(Socket, Packet, #{family => inet, port => Port, addr => Address}, []).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment