diff -ru icecast-2.3.2.old/src/source.c icecast-2.3.2/src/source.c
--- icecast-2.3.2.old/src/source.c	2008-05-15 16:25:04.000000000 +0300
+++ icecast-2.3.2/src/source.c	2009-02-24 09:11:27.000000000 +0200
@@ -479,10 +479,15 @@
         {
             if (source->last_read + (time_t)source->timeout < current)
             {
-                DEBUG3 ("last %ld, timeout %d, now %ld", (long)source->last_read,
-                        source->timeout, (long)current);
-                WARN0 ("Disconnecting source due to socket timeout");
-                source->running = 0;
+                if (source->queue_size > 0) {
+                    DEBUG1 ("Socket timeout, but we still have %ld bytes in queue",
+                            (long)source->queue_size);
+                } else {
+                    DEBUG3 ("last %ld, timeout %d, now %ld", (long)source->last_read,
+                            source->timeout, (long)current);
+                    WARN0 ("Disconnecting source due to socket timeout");
+                    source->running = 0;
+                }
             }
             break;
         }
