<div dir="ltr"><div><div><div><div><div><div><div><div><div>this is easy on client side but on the server side there must be an interaction<br></div>with spawned processes that actually use that socket to send data.<br><br></div>other thing I found hard to achieve in UDP is:<br> - to detect if a client is connected from what ports;<br></div> - sending detection errors from server to client :<br>   gen_udp:send/4 always returns ok no matter what if port and/or ip is wrong.<br></div>   otherwise it would have been easy to implement something pinging the client with an empty udp packet<br></div>   and (possibly, again) to receive response;<br></div>- gen_udp:recv is blocking (and with Timeout parameter even worse) and thus a design based on passive sockets leads to      serialized processing of client requests;<br></div></div>- if controlling process is used to handle other messages (from child procs) other then {udp, ...} message it would be <br></div>  unpractical from parallelization point of view of client request processing<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 4, 2016 at 4:43 PM, Sean Cribbs <span dir="ltr"><<a href="mailto:seancribbs@gmail.com" target="_blank">seancribbs@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">UDP is a connection-less datagram protocol, so there's no timeout inherent in the protocol.  However, you may have timeouts on:<div><br></div><div>1) receiving a datagram (nothing arrived)</div><div>2) sending a datagram (things went very badly)</div><div><br></div><div>However, those are timeouts internal to Erlang, from your process to the socket driver. If you are using the {active, true} option (which it sounds like you are), you should use an 'after' clause in your 'receive' to implement timeouts, or use the trailing timeout in the return tuple of a gen_server/gen_fsm callback.</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Thu, Feb 4, 2016 at 6:29 AM, Bogdan Andu <span dir="ltr"><<a href="mailto:bog495@gmail.com" target="_blank">bog495@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><div><div><div><div><div><div>Hi,<br><br></div>How can be detected a timeout on an active UDP socket?<br><br></div>controlling process receives the message:<br>{udp, Socket, Host, Port, Bin}<br><br></div>and after a process is spawned to handle that data:<br>spawn(fun() -> handle_pckt(Socket, Host, Port, Bin) end),<br><br></div>Q: how the spawned or controlling  process is able to detect <br>that a timeout on this UDP socket occurred ?<br><br></div>documentations does not mention anything about timeout on active sockets<br><br></div>Thanks,<br><br></div>/Bogdan<br><br><br><div><div><br></div></div></div>
<br></div></div>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>