[PD-dev] netsend/netreceive UDP ignore ECONNREFUSED

Dan Wilcox danomatika at gmail.com
Fri Mar 22 22:56:52 CET 2019


Howdy all,

I've been making some proposal work for updates to netsend/netreceive.

One issue is making UDP sending ignore connection refused errors. I have this working by catching the return value from recv():

        /* keep UDP alive */
    if (sys_sockerrno() == ECONNREFUSED && x->x_protocol == SOCK_DGRAM)
        return;

(I added sys_sockerrno() to return the socket errno.)

From my reading on the socket API, sending a UDP message conceptually shouldn't care about whether the receiver is there. However this is detected on a lower networking layer and propagated up to the application layer where it can be used or ignored.

My questions are:

1. Should this ignore silently and not close the connection? I notice mrpeach [udpsend] seems to ignores the first try, then closes the socket on the next failure. However, I like keeping the socket as no errors are thrown and you can easily break than re-establish UDP sending/receiving. This works well with the [netsend] dst & source relays.

2. Should this be a creation argument, say -k? I imagine there are plenty of patches which expect the socket to be closed automatically and respond to a 0 from the connection outlet. On the other hand, as UDP is "connectionless" my thinking is that the conceptual "connection" of a UDP [netsend] (aka outlet) refers to the internal socket and not necessarily that the destination is reachable. With TCP, the connection state more obviously refers to 1-1 connection with the other side.

--------
Dan Wilcox
@danomatika <http://twitter.com/danomatika>
danomatika.com <http://danomatika.com/>
robotcowboy.com <http://robotcowboy.com/>



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-dev/attachments/20190322/d1546095/attachment.html>


More information about the Pd-dev mailing list