Patch: accept() handling on HP-UX

From: Mika Iisakkila (no email)
Date: Mon Feb 27 2006 - 09:55:53 EST

  • Next message: Joel CARNAT: "[ sieve ] - script activated but not processed."

    This applies to 2.2.12, but I believe the same issue is present on later
    versions too. On HP-UX 11.*, accept() can return ENOBUFS for no particular
    reason, typically when the client went away before the program got around
    to calling accept() for it. Current Cyrus IMAP code would then terminate
    the child process; I don't know if this causes any other harm besides
    extra process handling overhead and error logs, but nevertheless is
    unnecessary, as the process could just accept() again. A similar fix
    was introduced in Apache 1.3.23 and can be found in many other major
    server software packages.

    On HP-UX 10 and earlier, ENOBUFS probably still is a real error, but
    I don't think too many people run (or would necessarily have to run)
    those. Determining the platform and turning ENOBUFS handling on if
    applicable should of course reside in the autoconf part, but no
    way I'm going to touch that...


    diff -Nacr cyrus-imapd-2.2.12-orig/master/service-thread.c cyrus-imapd-2.2.12/master/service-thread.c
    *** cyrus-imapd-2.2.12-orig/master/service-thread.c Wed Jun 2 20:26:38 2004
    --- cyrus-imapd-2.2.12/master/service-thread.c Thu Dec 29 16:57:51 2005
    *** 275,280 ****
    --- 275,283 ----
                      case EAGAIN:
                      case EINTR:
                      case ECONNABORTED:
    + #if defined(__hpux) && defined(ENOBUFS)
    + case ENOBUFS:
    + #endif
                          syslog(LOG_ERR, "accept failed: %m");
    diff -Nacr cyrus-imapd-2.2.12-orig/master/service.c cyrus-imapd-2.2.12/master/service.c
    *** cyrus-imapd-2.2.12-orig/master/service.c Fri Dec 17 18:32:25 2004
    --- cyrus-imapd-2.2.12/master/service.c Thu Dec 29 16:57:28 2005
    *** 440,445 ****
    --- 440,448 ----
                          case ENETUNREACH:
                          case EAGAIN:
                          case EINTR:
    + #if defined(__hpux) && defined(ENOBUFS)
    + case ENOBUFS:
    + #endif
                          case EINVAL:

    Cyrus Home Page:
    Cyrus Wiki/FAQ:
    List Archives/Info:

  • Next message: Joel CARNAT: "[ sieve ] - script activated but not processed."

    Hosted Email Solutions

    Invaluement Anti-Spam DNSBLs

    Powered By FreeBSD   Powered By FreeBSD