tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: shutdown(2)'ing a bound UDP socket

On Thu, Jul 16, 2020 at 10:24:16AM +0100, Roy Marples wrote:
> Hi Peter
> On 15/07/2020 13:00, Peter J. Philipp wrote:
> > Hi,
> > 
> > I'm the author of delphinusdnsd, a lightweight dns server.  I develop on
> > OpenBSD but produce ports to Linux, FreeBSD and NetBSD.  My latest code I
> > have ported to Linux and FreeBSD successfully, but NetBSD is not working.
> > 
> > What I do in my code is I bind (with SO_REUSEPORT option) two UDP descriptors
> > on the same port and shutdown(2) one of those (called dup) in the receive
> > setting (SHUT_RD).  This allows me to read off the non-shut descriptor but
> > send packets on either, it works out well on OpenBSD.  However while NetBSD
> > does allow shutting down the descriptor (unlike FreeBSD which has other
> > code to fix that problem it looks like), it does want to deliver incoming
> > queries to the shut descriptor.  I get one answer from my server on NetBSD
> > and then it blocks.  I tried patching this in kernel but it seems to be over
> > my head, I'm doing something wrong.  Basically the socket should get a
> > SS_CANTRCVMORE state, but checking for this seems to be hard, plus I don't
> > know what I'M doing in the NetBSD kernel.
> > 
> > So I'm basically left of begging someone to fix this functionality to skip
> > shutdown(2)'ed bound reading sockets and let the ones that do read receive
> > the packet.
> > 
> > Otherwise this may be my last year of supporting NetBSD unfortunately.  I
> > would like to give a donation but I'm dirt poor, as gesture I can maybe
> > afford five euros or something, but can't find more.  I have donated five USD
> > before in 2018, if it's worth any.  I'm releasing version 1.5.0 between
> > september 2020 and november 2020, and I hope to continue NetBSD support, if
> > only in -current.
> > 
> > If you need to see my code to see what I'm doing you can get it at
> > and the
> > relevant lines of code are in delphinusdnsd.c (main()) and go further into
> > forward.c.  If you need a config file for the forwarding mode I can produce
> > you one on request.
> > 
> > Please CC me directly as I'm not on the list.
> Do you have a small test case for this that can reproduce the issue?
> Roy

No I don't.  I'll construct something but it may take a few days.  I'll
contact you back.

Best Regards,

Home | Main Index | Thread Index | Old Index