--- loncom/Attic/lonc	2000/12/06 20:38:21	1.12
+++ loncom/Attic/lonc	2001/06/12 15:32:38	1.16
@@ -15,6 +15,8 @@
 # 2/8,7/25 Gerd Kortemeyer
 # 12/05 Scott Harrison
 # 12/05 Gerd Kortemeyer
+# 01/10/01 Scott Harrison
+# 03/14/01,03/15,06/12 Gerd Kortemeyer
 # 
 # based on nonforker from Perl Cookbook
 # - server who multiplexes without forking
@@ -59,6 +61,16 @@ while ($configline=<CONFIG>) {
 }
 close(CONFIG);
 
+# ----------------------------- Make sure this process is running from user=www
+my $wwwid=getpwnam('www');
+if ($wwwid!=$<) {
+   $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}";
+   $subj="LON: $perlvar{'lonHostID'} User ID mismatch";
+   system("echo 'User ID mismatch.  lonc must be run as user www.' |\
+ mailto $emailto -s '$subj' > /dev/null");
+   exit 1;
+}
+
 # --------------------------------------------- Check if other instance running
 
 my $pidfile="$perlvar{'lonDaemons'}/logs/lonc.pid";
@@ -382,7 +394,7 @@ while (1) {
     # check for new information on the connections we have
 
     # anything to read or accept?
-    foreach $client ($select->can_read(1)) {
+    foreach $client ($select->can_read(0.1)) {
 
         if ($client == $server) {
             # accept a new connection
@@ -431,16 +443,21 @@ while (1) {
         $rv = $client->send($outbuffer{$client}, 0);
         unless (defined $rv) {
             # Whine, but move on.
-            warn "I was told I could write, but I can't.\n";
+            &logthis("I was told I could write, but I can't.\n");
             next;
         }
+        $errno=$!;
         if (($rv == length $outbuffer{$client}) ||
-            ($! == POSIX::EWOULDBLOCK)) {
+            ($errno == POSIX::EWOULDBLOCK) || ($errno == 0)) {
             substr($outbuffer{$client}, 0, $rv) = '';
             delete $outbuffer{$client} unless length $outbuffer{$client};
         } else {
             # Couldn't write all the data, and it wasn't because
             # it would have blocked.  Shutdown and move on.
+
+	    &logthis("Dropping data with ".$errno.": ".
+                     length($outbuffer{$client}).", $rv");
+
             delete $inbuffer{$client};
             delete $outbuffer{$client};
             delete $ready{$client};