* 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).