Re: [EXIM] accept() errors instead of accepting when network…

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Malcolm Beattie
Date:  
À: exim-users
Sujet: Re: [EXIM] accept() errors instead of accepting when network unreachable
Philip Hazel writes:
> On Wed, 18 Nov 1998, Peter Gervai wrote:
>
> > I noticed that exim was unable to accept mail from internal
> > customers to international addresses but logged the following:
> >
> > 1998-11-17 21:16:34 1 accept() failure: Network is unreachable
> > 1998-11-17 21:17:55 2 accept() failures: No route to host
> >
> > and no other signs that there was an (unsuccessful) connection from the
> > customer which was denied. I understand that exim was unable to verify
> > recipient domains and the RBL but is it a normal behaviour not to accept
> > mail into the queue when the recipient cannot be verified?
>
> The answer to the question is "yes, if you have set receiver_verify",
> but in fact, this problem appears to have nothing to do with recipient
> verification. The accept() function is what the Exim daemon calls when
> it is waiting for an incoming TCP/IP call. Something has gone wrong in
> setting up the TCP/IP call. I'm afraid I am not knowledgeable enough
> about TCP/IP to hazard a guess as to what it was.
>
> > (When such incidents happen maybe I'd like to see exim accepting
> > the mail from the customers, no matter it's impossible to verify.)
>
> That of course isn't relevant to the accept() problem. However, if you
> have set receiver_verify, Exim won't accept addresses that it cannot
> verify. But you do not have to set receiver_verify.


I missed the original message but happened to spot this one. Getting
additional "unexpected" error reports on accept() (and a few other
networking syscalls) is something that tends to happen with Linux.
The 2.0 kernel series are RFC1122 compliant whereas BSD-derived
network stacks aren't. Under Linux 2.0, accept() can pass network
error information up to user level. Software which doesn't expect
this can get a bit confused: simply logging the error messages and
treating the errors as EAGAIN (which is what I presume exim does) is
reasonable behaviour. Now that the BSD-derived behaviour has been
standardised in POSIX.1g and UNIX98, the Linux 2.1 kernels hide the
addition information.

--Malcolm

--
Malcolm Beattie <mbeattie@???>
Unix Systems Programmer
Oxford University Computing Services

--
*** Exim information can be found at http://www.exim.org/ ***