gen_udp:send/4

Ben Murphy benmmurphy@REDACTED
Thu Dec 5 19:26:54 CET 2019


There used to be a bug with using the inet functions and having a large message queue. Because the receive couldn’t use the selective receive optimisation it would have to scan the whole of the message queue. It looks like you have a large message queue maybe this bug still exists and effects you.

Sent from my iPhone

> On 5 Dec 2019, at 16:39, Steven <mailparmalat@REDACTED> wrote:
> 
> 
> Hi,
> 
> We have a situation where gen_udp:send/4 does not return ok and it just hangs and the process is waiting indefinitely. 
> 
> e.g.
>  {current_function,{prim_inet,sendto,4}},
>  {initial_call,{proc_lib,init_p,5}},
>  {status,running},
>  {message_queue_len,15363062},
> 
> The send buffer size on the socket is around 200KB. 
> 
> 3> inet:getopts(S, [sndbuf]).
> {ok,[{sndbuf,212992}]}
> 
> The UDP socket doesn't receive any incoming packets so it is used for sending only. Running R21-3 with redhat 7.5. Would like to ask the group under which conditions will the port not come back with inet_reply? I assume if the sndbuf is full then it should come back with enobufs or some sort but it should be quick enough to flush the sndbuf to interface.
> 
> In prim_inet:sendTo/4, it always expect inet reply from OS but it never comes and never times out.
> 
> try erlang:port_command(S, PortCommandData) of
>                         true ->
>                             receive
>                                 {inet_reply,S,Reply} ->
>                                     ?DBG_FORMAT(
>                                        "prim_inet:sendto() -> ~p~n", [Reply]),
>                                     Reply
>                             end
>                     catch
> 
> Thanks



More information about the erlang-questions mailing list