You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Dean Gaudet <dg...@arctic.org> on 1997/07/28 20:37:29 UTC

[PATCH] solaris sockets

I think the comment in the patch speaks for itself.  I'll mail this to all
the PR submitters.  This is against 1.2.1 without the previous patch
applied.

Dean

--- apache_1.2.1-dist/src/http_main.c	Sun Jun 29 11:08:37 1997
+++ apache_1.2.1/src/http_main.c	Mon Jul 28 11:35:36 1997
@@ -1982,7 +1982,27 @@
         exit(1);
     }
 
+    /* Solaris, at least versions 2.4, 2.5 and 2.5.1, even with various
+     * levels of tcp/ip patches available as of July 28, 1997, completely
+     * botches up if you do any form of dup() on a socket.  If that dupped
+     * socket is then put into listen() and accept()s at least one
+     * connection, then Bad Things happen.  Things work fine until the
+     * socket is close()d.  At that point, no matter what SO_REUSEADDR was
+     * set to, nothing can rebind the same address/port, you'll get
+     * "Address in use" errors.  This takes about 5 minutes to timeout.
+     *
+     * So we do no slacking on solaris sockets.  If you can live with those
+     * restrictions (which essentially means you have to use SIGUSR1 and
+     * not SIGHUP to restart the server, and should you ever need to stop
+     * the server you'll have at least a 5 minute wait before you can
+     * restart it) then you can remove this #ifndef.  You'll get yourself
+     * another 120ish virtual hosts (assuming you're using Listen for each
+     * of them) before you run into another Solaris problem:  the 256
+     * FILE * limitation.
+     */
+#ifndef SOLARIS2
     s = ap_slack(s, AP_SLACK_HIGH);
+#endif
 
     note_cleanups_for_fd(pconf, s); /* arrange to close on exec or restart */