[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 2.99.48 smtpserver won't accept()?
On Tue, 6 May 1997, Matti Aarnio wrote:
> > In case anyone else runs into this, I'll document the problem:
> >
> > On Sat, 3 May 1997, I wrote:
> > > I just updated one of my Linux (2.0.26) systems from zmailer 2.99.38 to
> > > 2.99.48pl2.
> > >
> > > Now the SMTP server won't accept any connections. Strace shows it
> > > sitting in an accept() even after I've attempted to connect to it
> > > from a variety of machines. The TCP connection actually never gets
> > > established. It looks to me like there's something wrong with the
> > > bind() or some ioctl on the socket before the accept().
> >
> > Matti figured it out. I should have recognized the symptoms. Prior to the
> > 2.0.27 Linux kernel, large arguments (larger than 8 bits - 255) caused
> > select() to hang and never return. The new smtpserver is using
> > select(2000) to combat denial of service attacks.
>
> Sorry, Andy mixed things. It is listen(sock, LIMIT) where
> the limit value has traditionally been limited to 5, and on those
> systems that have it fixed, no matter how high the parameter is,
> it will be 5. (Or lower, minimum is 1, I think.)
>
> With newer systems the LIMIT value can be higher, and I did reason
> that as my Linux 2.0.27 works just fine with 2000 (and is SYN-attack
> resilient), and Solaris 2.5.1 and DEC/UNIX work too, I should be
> "home free" with it.
>
> It surprises me that limit(sock, 2000) is too high for Linux
> kernel version 2.0.26.
>
> The whole excercise has been for getting the system to be SYN-attack
> resilient in the SMTP service -- at those systems capable to be such.
>
> > -Andy
> > Global Auctions
>
> /Matti Aarnio <mea@nic.funet.fi>
I was wondering why smtpserver would be calling select() on incoming
connections, now I know :)
BTW, BSD4.4 systems have a define in sys/socket.h called SOMAXCONN that
defines the maximum value for listen. If the supplied param is bigger
than SOMAXCONN, it is set to SOMAXCONN.
I'm pretty sure that Solaris does this too. I really doubt that you are
actually get a "real" 2000 entry listen queue :)
Tom