lkml.org 
[lkml]   [1998]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    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.

    Dean

    /* 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:
    #endif
    #ifdef ECONNABORTED
    case ECONNABORTED:
    #endif
    /* 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:
    #endif
    #ifdef ETIMEDOUT
    case ETIMEDOUT:
    #endif
    #ifdef EHOSTUNREACH
    case EHOSTUNREACH:
    #endif
    #ifdef ENETUNREACH
    case ENETUNREACH:
    #endif
    break;

    default:
    ap_log_error(APLOG_MARK, APLOG_ERR, server_conf,
    "accept: (client socket)");
    clean_child_exit(1);
    }


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu

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