mailing list of musl libc
 help / color / mirror / code / Atom feed
* Breakeage on Linux due to SO_REUSEPORT
@ 2013-04-01 16:53 Rich Felker
  2013-04-02 16:04 ` Simon Kelley
  0 siblings, 1 reply; 2+ messages in thread
From: Rich Felker @ 2013-04-01 16:53 UTC (permalink / raw)
  To: simon; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 790 bytes --]

Hi,

Back in November, we had a bug report against musl libc due to dnsmasq
failing because we had defined SO_REUSEPORT in the headers, but Linux
did not support it. At the time I just removed the definition, but
we're adding it back now, as Linux has just recently added
SO_REUSEPORT support, and thus the same issue will arise with glibc
(which is just including asm/socket.h and thus getting the kernel's
definition of it) too. I've attached the original bug report thread.

The fundamental problem is that it's not valid to assume SO_REUSEPORT
is supported/working just because it's defined. Instead, the usage
pattern should probably be something like

#ifdef SO_REUSEPORT
	if (setsockopt(s, SO_REUSEPORT, ...)<0 && errno==ENOPROTOOPT)
#endif
	setsockopt(s, SO_REUSEADDR, ...);


Rich

[-- Attachment #2: Type: message/rfc822, Size: 7980 bytes --]

[-- Attachment #2.1.1: Type: text/plain, Size: 2446 bytes --]

Thanks Rich !

It is working.

You guys are the best !

Don't know if anyone is interested, but this is the memory usage of the
glibc binary (dynamically linked, distro supplied) :
root      9931  0.4  0.4   4232  1020 pts/2    S+   03:23   0:00 /dnsmasq

Musl binary, statically linked:
root      9927  0.0  0.1    328   244 pts/2    S    03:20   0:00 ./dnsmasq

RSS size down from 1020 to 244, thus 25% of original consumption.

Regards
Paul

On Fri, Nov 16, 2012 at 2:18 AM, Rich Felker <dalias@aerifal.cx> wrote:

> On Thu, Nov 15, 2012 at 07:11:10PM -0500, Rich Felker wrote:
> > On Thu, Nov 15, 2012 at 06:37:25PM -0500, Rich Felker wrote:
> > > On Fri, Nov 16, 2012 at 12:21:11AM +0200, Paul Schutte wrote:
> > > > Hi guys,
> > > >
> > > > I am now hitting a similar problem on armel.
> > > >
> > > > I am cross-compiling "dnsmasq"
> > > >
> > > > Glibc strace:
> > > >
> > > > ---snip---
> > > > socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 5
> > > > fcntl64(5, F_GETFL)                     = 0x2 (flags O_RDWR)
> > > > fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
> > > > setsockopt(5, SOL_IP, IP_MTU_DISCOVER, [0], 4) = 0
> > > > setsockopt(5, SOL_IP, IP_PKTINFO, [1], 4) = 0
> > > > setsockopt(5, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
> > > > setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
> > > >
> > > >
> > > > Musl strace:
> > > >
> > > > socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 5
> > > > fcntl64(5, F_GETFL)                     = 0x2 (flags O_RDWR)
> > > > fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK|O_LARGEFILE) = 0
> > > > setsockopt(5, SOL_IP, IP_MTU_DISCOVER, [0], 4) = 0
> > > > setsockopt(5, SOL_IP, IP_PKTINFO, [1], 4) = 0
> > > > setsockopt(5, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
> > > > setsockopt(5, SOL_SOCKET, *0xf /* SO_??? */*, [1], 4) = -1
> ENOPROTOOPT
> > > > (Protocol not available)
> > >
> > > Thanks for the report. I'll check and see if ARM has unusual
> > > definitions we're missing.
> >
> > This doesn't seem to be ARM-specific. Linux has reserved a number for
> > SO_REUSEPORT, but it's not implemented in the kernel it seems, and
> > musl is providing the value, presumably causing the app to use it and
> > think it works. I'm guessing I should just remove it, but it might be
> > possible/preferable to make setsockopt and getsockopt remap it to
> > SO_REUSEADDR internally. Ideas anyone?
>
> For now I've disabled it, matching what other libcs do on Linux.
> Changes are in current git.
>
> Rich
>

[-- Attachment #2.1.2: Type: text/html, Size: 3273 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Breakeage on Linux due to SO_REUSEPORT
  2013-04-01 16:53 Breakeage on Linux due to SO_REUSEPORT Rich Felker
@ 2013-04-02 16:04 ` Simon Kelley
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Kelley @ 2013-04-02 16:04 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

On 01/04/13 17:53, Rich Felker wrote:
> Hi,
>
> Back in November, we had a bug report against musl libc due to dnsmasq
> failing because we had defined SO_REUSEPORT in the headers, but Linux
> did not support it. At the time I just removed the definition, but
> we're adding it back now, as Linux has just recently added
> SO_REUSEPORT support, and thus the same issue will arise with glibc
> (which is just including asm/socket.h and thus getting the kernel's
> definition of it) too. I've attached the original bug report thread.
>
> The fundamental problem is that it's not valid to assume SO_REUSEPORT
> is supported/working just because it's defined. Instead, the usage
> pattern should probably be something like
>
> #ifdef SO_REUSEPORT
> 	if (setsockopt(s, SO_REUSEPORT, ...)<0 && errno==ENOPROTOOPT)
> #endif
> 	setsockopt(s, SO_REUSEADDR, ...);
>
>
> Rich
>


Thanks for that. The fix has gone into the forthcoming dnsmasq-2.66 release.


Cheers,

Simon.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2013-04-02 16:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-01 16:53 Breakeage on Linux due to SO_REUSEPORT Rich Felker
2013-04-02 16:04 ` Simon Kelley

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).