[svn:qpsmtpd] rev 501 - trunk

[email protected] 13 Jul 2005 17:10:38 -0000
Newsgroups perl.cvs.qpsmtpd
Message-ID <[email protected]>
Author: msergeant
Date: Wed Jul 13 10:10:38 2005
New Revision: 501

Modified:
   trunk/qpsmtpd-forkserver
Log:
Fix for forkserver breakage


Modified: trunk/qpsmtpd-forkserver
==============================================================================
--- trunk/qpsmtpd-forkserver	(original)
+++ trunk/qpsmtpd-forkserver	Wed Jul 13 10:10:38 2005
@@ -71,12 +71,6 @@ $ENV{PATH} = '/bin:/usr/bin:/var/qmail/b
 my %childstatus = ();
 
 sub REAPER {
-#  foreach my $chld (keys %childstatus) {
-#    if (defined(waitpid($chld, WNOHANG))) {
-#      ::log(LOGINFO,"cleaning up after $chld");
-#      delete $childstatus{$chld};
-#    }
-#  }
   while ( defined(my $chld = waitpid(-1, WNOHANG)) ){
     last unless $chld > 0;
     ::log(LOGINFO,"cleaning up after $chld");
@@ -180,6 +174,9 @@ while (1) {
       # possible something condition...
       next;
     }
+    
+    # Make this client blocking while we figure out if we actually want to
+    # do something with it.
     IO::Handle::blocking($client, 1);
     my ($port, $iaddr) = sockaddr_in($hisaddr);
     if ($MAXCONNIP) {
@@ -225,6 +222,8 @@ while (1) {
     
     $::LineMode = 1;
     
+    # Make this client non-blocking so it works with the Danga framework
+    IO::Handle::blocking($client, 0);
     my $qp = Qpsmtpd::PollServer->new($client);
     $qp->load_plugins;
     $qp->init_logger;