[lkml]   [1998]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Sendmail 8.9.0 claims a Linux kernel bug
    On 24 Jun 1998, Ben Gertzfield wrote:

    > "Connection timed out" is not documented as a valid return from
    > accept(2) and this is believed to be a bug in the Linux kernel.

    What a lame excuse. Anyhow, here's what I did in Apache, where I care
    more about reliability than whether man pages are up to date. Someone may
    want to use this to form a better patch for sendmail... or to get the man
    pages updated.


    /* Our old behaviour here was to continue after accept()
    * errors. But this leads us into lots of troubles
    * because most of the errors are quite fatal. For
    * example, EMFILE can be caused by slow descriptor
    * leaks (say in a 3rd party module, or libc). It's
    * foolish for us to continue after an EMFILE. We also
    * seem to tickle kernel bugs on some platforms which
    * lead to never-ending loops here. So it seems best
    * to just exit in most cases.
    switch (errno) {
    #ifdef EPROTO
    /* EPROTO on certain older kernels really means
    * ECONNABORTED, so we need to ignore it for them.
    * See discussion in new-httpd archives nh.9701
    * search for EPROTO.
    * Also see nh.9603, search for EPROTO:
    * There is potentially a bug in Solaris 2.x x<6,
    * and other boxes that implement tcp sockets in
    * userland (i.e. on top of STREAMS). On these
    * systems, EPROTO can actually result in a fatal
    * loop. See PR#981 for example. It's hard to
    * handle both uses of EPROTO.
    case EPROTO:
    /* Linux generates the rest of these, other tcp
    * stacks (i.e. bsd) tend to hide them behind
    * getsockopt() interfaces. They occur when
    * the net goes sour or the client disconnects
    * after the three-way handshake has been done
    * in the kernel but before userland has picked
    * up the socket.
    #ifdef ECONNRESET
    case ECONNRESET:
    #ifdef ETIMEDOUT
    case ETIMEDOUT:
    #ifdef ENETUNREACH

    ap_log_error(APLOG_MARK, APLOG_ERR, server_conf,
    "accept: (client socket)");

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to

     \ /
      Last update: 2005-03-22 13:43    [W:0.021 / U:6.136 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site